Dlaczego nie „utworzyć instancji nowego obiektu wewnątrz konstruktora obiektów”?

Odpowiedziałem na pytanie (połączyć), że użyłem utworzenia nowego obiektu w innym konstruktorze klasy, tutaj przykład:

class Person {
  public $mother_language;

  function __construct(){ // just to initialize $mother_language
    $this->mother_language = new Language('English');
}

I otrzymałem komentarz od użytkownika „Matija” (jego profil) i napisał:Nigdy nie powinieneś tworzyć instancji nowego obiektu wewnątrz obiektu consturctor, zależności powinny być wypychane z zewnątrz, więc każdy, kto używa tej klasy, wie, na czym polega ta klasa!

Ogólnie mogę się z tym zgodzić i rozumiem jego punkt widzenia.

Jednak często robiłem to w ten sposób, na przykład:

jako właściwości prywatne inne klasy dają mi funkcjonalność, którą mogę rozwiązać nie duplikując kodu, na przykład mogę utworzyć listę (implementacja klasyArrayAccess interfejs) obiektów), a ta klasa byłaby używana w innej klasie, która ma taką listę obiektów,niektóre klasy używają na przykładDateTime przedmioty,Jeśli jainclude (lub autoload) klasa zależna, nie powinno być problemu z błędami,

ponieważ obiekty zależne mogą być bardzo dużą liczbą, przekazanie ich wszystkich do konstruktora klasy może być bardzo długie i niewyraźne, na przykład

$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, ...............);

jak byłem „urodzony” w Pascalu, to w Delphi mam pewne nawyki. W Delphi (i FreePascal jako konkurencie) ta praktyka jest bardzo często. Na przykład jestTStrings klasa, która obsługuje tablicę ciągów, i do przechowywania ich nie używaarrays, ale inna klasa,TList, który zapewnia kilka użytecznych metodTStrings jest tylko jakimś interfejsem. TheTList obiekt jest deklarowany jako prywatny i nie ma dostępu z zewnątrz, ale pobierający i ustawiającyTStrings.

(nie ważne, ale z jakiegoś powodu) zazwyczaj używam moich zajęć.

Proszę mi wyjaśnić, czy naprawdę ważne jest unikanie tworzenia obiektów w konstruktorach?

Przeczytałemta dyskusja ale wciąż nie rozumiem.

questionAnswers(6)

yourAnswerToTheQuestion