Создание объекта внутри другого класса? Вопрос 1 - правилен ли следующий вариант, если нет, то почему?class A
class B public $a function __construct() $this->a = new A()
2. Даже если это не совсем тру вариант, у меня это работает. Вопрос 2. Почему запись объекта другого класса в свойство можно делать только через конструктор? Вот так не работает, но по синтаксису PHP вроде логично.class A
class B public $a = new A() }upd. Очень интересно было бы узнать мнение тех, кто смотрел исходный код PHP. Может действительно такой подход несет скрытую логику.
Ответ на первый вопрос Ваш вариант создания объекта класса A внутри класса B через конструктор правильный и будет работать. Это нормальная практика создания объектов одного класса внутри другого через конструктор.
Ответ на второй вопрос В PHP нельзя инициализировать свойство объекта непосредственно в теле класса, как это можно делать с обычными переменными. Причина в том, что выражения при инициализации свойств объекта должны быть статическими и не могут содержать вызовы функций или создание объектов. Поэтому инициализация свойства объекта другого класса должна быть выполнена в конструкторе, где можно использовать любые действия и функции.
Таким образом, правильным подходом будет инициализировать объект класса A в конструкторе класса B, как вы сделали в вашем первом варианте.
Относительно скрытой логики в исходном коде PHP, стоит отметить, что это больше связано с особенностями языка и соглашениями о стиле программирования, чем с какой-то скрытой логикой, которую разработчики PHP решили внедрить.
Ответ на первый вопрос
Ваш вариант создания объекта класса A внутри класса B через конструктор правильный и будет работать. Это нормальная практика создания объектов одного класса внутри другого через конструктор.
Ответ на второй вопрос
В PHP нельзя инициализировать свойство объекта непосредственно в теле класса, как это можно делать с обычными переменными. Причина в том, что выражения при инициализации свойств объекта должны быть статическими и не могут содержать вызовы функций или создание объектов. Поэтому инициализация свойства объекта другого класса должна быть выполнена в конструкторе, где можно использовать любые действия и функции.
Таким образом, правильным подходом будет инициализировать объект класса A в конструкторе класса B, как вы сделали в вашем первом варианте.
Относительно скрытой логики в исходном коде PHP, стоит отметить, что это больше связано с особенностями языка и соглашениями о стиле программирования, чем с какой-то скрытой логикой, которую разработчики PHP решили внедрить.