2009-04-24 2 views
0

$this->a->b->c->d calling methods from a superclass in phpВызова родительского класса От Sub класса PHP

Ive задал вопрос по этой ссылке я в проблему с этим tecnique я в состоянии назвать классы юга от класса

как этот

$ chesterx-> db-> запрос();

Я хочу сделать получить еще один класс из подклассов

, например

я хочу, чтобы запросить выполнение, который пришел из класса SQL

  ROOT 
      | 
sql <--- chesterx ---> db 

Я хочу использовать класс SQL из БД

проблема я не могу вернуть класс chesterx из класса db

/редактировать/

У меня есть несколько классов, таких как новости, члены, категории, дб и запрос

и я сделал это, как ссылка, которая была на предмет верхней

общественная функция __construct () {

function __construct(){ 
     if(!$this->db){          
       include(ROOT."/func/class/bp.db.class.php"); 
       $this->db = new db; 
      } 
if(!$this->chester){           
       include(ROOT."/func/class/bp.chester.class.php"); 
       $this->db = new chester; 
      } 
     } 

я назвал класс дб с этим кодом, и теперь я могу позвонить и использовать методы класса дб хорошо

, например

я хочу использовать метод из БД

, что метод, содержащий значение, которое возвращающую данные из метода класса Честера

я хочу, чтобы я был разъяснить себе /редактировать/

есть все равно для этого?

+0

You Вам нужно немного перефразировать ваш вопрос. Я этого не понимаю. –

+0

Извините, я понятия не имею, о чем вы просите ... не могли бы вы уточнить? – Greg

+0

Согласны, пример кода был бы чрезвычайно полезен здесь. – Rob

ответ

3

Я нахожу решение хорошо Йонут Г. Стэна для вашего дела, но вы также можете рассмотреть factory/singleton pattern, хотя это только хорошо, если ваш класс chesterx является глобальным, и только раз

3

Нижеприведенный фрагмент может быть решением, хотя мне не очень нравится круговая ссылка. Попробуйте и используйте его по своему усмотрению. И, кстати, то, что вы называете классом и подклассом, на самом деле содержит и содержит класс.

class Database 
{ 
    public $chesterx; 

    public function __construct($chesterx) 
    { 
     $this->chesterx = $chesterx; 
    } 
} 

class Sql 
{ 
    public $chesterx; 

    public function __construct($chesterx) 
    { 
     $this->chesterx = $chesterx; 
    } 
} 

class Chesterx 
{ 
    public $db; 

    public $sql; 

    public function __construct() 
    { 
     $this->db = new Database($this); 
     $this->sql = new Sql($this); 
    } 
} 
Смежные вопросы