Почему бы не «создать новый объект внутри конструктора объекта»?
Я ответила на вопрос (ссылка) что я использовал создание нового объекта в конструкторе другого класса, вот пример:
class Person {
public $mother_language;
function __construct(){ // just to initialize $mother_language
$this->mother_language = new Language('English');
}
И я получил комментарий от пользователя "Matija" (его профиль) и он написал:Никогда не следует создавать экземпляр нового объекта внутри констурктора объекта, зависимости должны передаваться извне, поэтому любой, кто использует этот класс, знает, от чего зависит этот класс!
Вообще, я могу с этим согласиться, и я понимаю его точку зрения.
Тем не менее, я делал это очень часто, например:
в качестве личных свойств другие классы дают мне функциональность, которую я могу решить, не дублируя код, например, я могу создать список (реализация классаArrayAccess
интерфейс) объектов), и этот класс будет использоваться в другом классе, который имеет такой список объектов,некоторые классы используют напримерDateTime
объекты,Если яinclude
(или автозагрузка) зависимый класс, не должно быть проблем с ошибками,поскольку зависимых объектов может быть очень много, передача всех их конструктору классов может быть очень длинной и непонятной, например
$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
.
Пожалуйста, объясните мне, действительно ли важно избегать создания объектов в конструкторах?
я прочелэто обсуждение но все еще неясно.