Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема с наследованием у классов
 
 автор: golovdinov   (13.06.2008 в 18:33)   письмо автору
 
 

Доброе время суток!

Опишу свою проблему:
Есть класс CORE, у него в __construct вбивается переменная $db, являющяяся созданным ранее классом БД. Она ($db или в самом классе $this->db) работает нормально. Вот рабочий пример:

<?php
class DB {
 
/* код класса */
}

class 
CORE {
   protected 
$db;

   public 
__construct ($db) {
      
$this->db $db;
   }

   public function 
funct () {
      return 
$this->db->query (" *** ");
   }
}

$db = new DB;

$core = new CORE ($db);
$response $core->funct();
?>


Но когда создаю подкласс для CORE, обращаться к переменной db родительского класса не получается. Делаю так:

<?php
class BLOCK extends CORE {
   public 
__construct () {}

   public function 
my_funct () {
       return 
$this->db->query (" *** ");
   }
}

$block = new BLOCK;
$response $block->my_funct ();
?>


Последний код выдает ошибку типа: Call to a member function query() on a non-object...

Что делаю неправильно? И как сделать второй код рабочим?

   
 
 автор: cheops   (13.06.2008 в 19:06)   письмо автору
 
   для: golovdinov   (13.06.2008 в 18:33)
 

Вы не инициализируете конструктор родительского класса CORE, следует переписать класс BLOCK как-то так
<?php 
class BLOCK extends CORE 
   public 
__construct ($bd) {
     
parent::__construct ($bd);
   } 

   public function 
my_funct () { 
       return 
$this->db->query (" *** "); 
   } 


$block = new BLOCK($db); 
$response $block->my_funct (); 
?>

Иначе как объект $db попадёт внутрь класса CORE.

   
 
 автор: golovdinov   (13.06.2008 в 19:12)   письмо автору
 
   для: cheops   (13.06.2008 в 19:06)
 

Но CORE уже создан и мне довольно проблематично заново вызывать _construct для него (в нем около 6 переменных). Это действительно единственный вариант?

   
 
 автор: cheops   (13.06.2008 в 20:24)   письмо автору
 
   для: golovdinov   (13.06.2008 в 19:12)
 

Не очень понятно, создан объект класса CORE (нельзя его передавать конструктору, чтобы им инициализировать базовую часть класса)?

   
 
 автор: golovdinov   (13.06.2008 в 20:29)   письмо автору
 
   для: cheops   (13.06.2008 в 20:24)
 

<?php 
class DB 
 
/* код класса */ 


class 
CORE 
   protected 
$db

   public 
__construct ($db) { 
      
$this->db $db
   } 

   public function 
funct () { 
      return 
$this->db->query (" *** "); 
   } 


$db = new DB

$core = new CORE ($db); 

class 
BLOCK extends CORE 
   public 
__construct () {} 

   public function 
my_funct () { 
       return 
$this->db->query (" *** "); 
   } 


$block = new BLOCK

$response $block->my_funct ();
?>


Код такого вида...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования