Создание объекта внутри другого класса? Вопрос 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
160 +1
0
Ответы
1

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

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

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

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

20 Апр в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 90 620 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир