Вызов родительского класса из подкласса PHP - PullRequest
0 голосов
/ 24 апреля 2009

$ this-> a-> b-> c-> d, вызывающий методы из суперкласса в php

Я задал вопрос по этой ссылке. У меня проблема с этой техникой. Я могу вызывать подклассы из класса

как это

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

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

например

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

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

я хочу использовать класс sql из db

проблема, которую я не могу вернуть класс 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;
            }
        }

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

например

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

этот метод содержит значение, которое возвращало данные из метода класса chester

Я хотел бы прояснить себя / редактировать /

есть ли вообще это сделать?

Ответы [ 2 ]

3 голосов
/ 25 апреля 2009

Я нахожу решение Ionut G. Stan подходящим для вашего случая, но вы также можете рассмотреть фабричный / синглтонный шаблон , хотя это хорошо, только если ваш класс chesterx является глобальным и называется один раз

3 голосов
/ 24 апреля 2009

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

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);
    }
}
...