Как сохранить дочерний класс в свойстве родительского класса? - PullRequest
1 голос
/ 02 декабря 2011

Это кажется довольно простым, но я не делаю это в течение долгого времени ...

class Main
{
    public $sub1;
    public $sub2;

    public function __construct()
    {
        $this->sub1 = new Sub1();
        $this->sub2 = new Sub2();
    }
}

class Sub1 extends Main
{
    public function __construct() {}

    public function helloWorld()
    {
        echo "hello world";
    }
}

class Sub2 extends Main
{
    public function __construct()
    {
        $this->sub1->helloWorld();
    }
}

new Main();

Результат кода Неустранимая ошибка: вызов функции-члена helloWorld() .Но почему?Я не понимаю, почему свойство sub1 класса Main равно NULL, когда я пытаюсь получить к нему доступ из sub2.Может ли кто-нибудь объяснить это мне?Я делаю что-то в принципе неправильно с точки зрения программирования ООП?Мне больно какие-то концепции?Есть ли лучшие решения?

С уважением!

Ответы [ 3 ]

1 голос
/ 02 декабря 2011

Вы переопределяете значение Main __construct() в Sub1 и Sub2, что означает, что конструкция Main никогда не вызывается.Даже если бы вы вызывали parent::__construct() в конструкции Sub1 и Sub2, вы получите бесконечный цикл, потому что конструкция Main инициализирует обе подпрограммы.

Edit: Поскольку вы хотите обмениваться объектами,Вот пара вопросов SO, которые могут помочь:
Совместное использование объектов между классами PHP
Как создать объект в родительском классе, совместно используемом его дочерними классами?

0 голосов
/ 02 декабря 2011

Я думаю, вы можете объяснить, какую проблему вы пытаетесь решить, очевидно, вы не можете сделать это таким образом, но я полагаю, что ваша проблема не должна зависеть от решения, с которым вы пришли.Так что, возможно, кто-то может дать вам хороший ответ.

0 голосов
/ 02 декабря 2011

Как можно ожидать, что ты не будешь смертельным. Вы пытаетесь получить доступ к $ Sub1, не имея его экземпляра. То, что вам нужно понять, это создание объектов. Когда вы пишете класс, это просто определение. Вам нужен экземпляр для работы.

...