Я ответил на вопрос (ссылка), что я использовал создание нового объекта в конструкторе другого класса, вот пример:
class Person {
public $mother_language;
function __construct(){ // just to initialize $mother_language
$this->mother_language = new Language('English');
}
И я получил комментарий от пользователя "Matija" (его профиль), и он написал: вы никогда не должны создавать экземпляр нового объекта внутри объекта consturctor, зависимости должны быть нажаты извне, поэтому любой, кто использует этот класс, знает, что этот класс зависит от!
В общем, я могу согласиться с этим, и я понимаю его точку зрения.
Однако я часто делал это так, например:
- поскольку частные свойства других классов дают мне функциональность, которую я могу решить, не дублируя код, например, я могу создать список (реализация класса
ArrayAccess
) объектов), и этот класс будет использоваться в другом классе, который имеет такой список объектов, - В некоторых классах используются, например, объекты
DateTime
, - Если я
include
(или autoload) зависимый класс, у него не должно быть проблем с ошибками, -
потому что зависимые объекты могут быть очень большим числом, передача всех из них в конструктор класса может быть очень длинной и непонятной, например
$color = new TColor('red'); // do we really need these lines? $vin_number = new TVinNumber('xxx'); $production_date = new TDate(...); ... $my_car = new TCar($color, $vin_number, $production_date, ...............);
-
поскольку я был "рожден" в Паскале, затем в Дельфи, у меня есть некоторые привычки оттуда. И в Delphi (и FreePascal как его конкурент) эта практика очень часто. Например, существует класс
TStrings
, который обрабатывает массив строк, и для их хранения он не используетarray
, а другой классTList
, который предоставляет некоторые полезные методы, аTStrings
- это только некоторый тип интерфейс. ОбъектTList
является объявленным пользователем и не имеет доступа извне, но получатели и сеттерыTStrings
. - (не важно, но по какой-то причине) обычно я тот, кто использует мои классы.
Пожалуйста, объясните мне, действительно ли важно избегать создания объектов в конструкторах?
Я читал эту дискуссию, но до сих пор неясно.