Создание объекта внутри другого класса? Вопрос 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. Может действительно такой подход несет скрытую логику.

21 Авг 2019 в 07:03
185 +1
0
Ответы
1

Ответ на первый вопрос:
Ваш вариант создания объекта класса A внутри класса B через конструктор правильный и будет работать. Это нормальная практика создания объектов одного класса внутри другого через конструктор.

Ответ на второй вопрос:
В PHP нельзя инициализировать свойство объекта непосредственно в теле класса, как это можно делать с обычными переменными. Причина в том, что выражения при инициализации свойств объекта должны быть статическими и не могут содержать вызовы функций или создание объектов. Поэтому инициализация свойства объекта другого класса должна быть выполнена в конструкторе, где можно использовать любые действия и функции.

Таким образом, правильным подходом будет инициализировать объект класса A в конструкторе класса B, как вы сделали в вашем первом варианте.

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

20 Апр 2024 в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир