Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр 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 Яндекс.Метрика Яндекс цитирования