|
|
|
| Доброе время суток!
Опишу свою проблему:
Есть класс 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...
Что делаю неправильно? И как сделать второй код рабочим? | |
|
|
|
|
|
|
|
для: 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. | |
|
|
|
|
|
|
|
для: cheops
(13.06.2008 в 19:06)
| | Но CORE уже создан и мне довольно проблематично заново вызывать _construct для него (в нем около 6 переменных). Это действительно единственный вариант? | |
|
|
|
|
|
|
|
для: golovdinov
(13.06.2008 в 19:12)
| | Не очень понятно, создан объект класса CORE (нельзя его передавать конструктору, чтобы им инициализировать базовую часть класса)? | |
|
|
|
|
|
|
|
для: 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 ();
?>
|
Код такого вида... | |
|
|
|