Warum nicht ein neues Objekt im Objektkonstruktor instanziieren?

Ich habe eine Frage beantwortet (Verknüpfung), dass ich das neue Objekt in einem Konstruktor einer anderen Klasse erstellt habe, hier das Beispiel:

class Person {
  public $mother_language;

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

Und ich habe den Kommentar von Benutzer "Matija" (sein Profil) und er schrieb:Sie sollten niemals ein neues Objekt innerhalb des Objektkonstruktors instanziieren. Abhängigkeiten sollten von außen verschoben werden, damit jeder, der diese Klasse verwendet, weiß, wovon diese Klasse abhängig ist!

Im Allgemeinen kann ich dem zustimmen und ich verstehe seinen Standpunkt.

Früher habe ich das sehr oft gemacht, zum Beispiel:

Da die privaten Eigenschaften andere Klassen mir Funktionen geben, die ich lösen kann, ohne den Code zu duplizieren, kann ich zum Beispiel eine Liste erstellen (Klassenimplementierung)ArrayAccess Interface) von Objekten), und diese Klasse würde in einer anderen Klasse verwendet, die eine solche Liste von Objekten hat,Einige Klassen verwenden zum BeispielDateTime Gegenstände,wenn ichinclude (oder Autoload) abhängige Klasse, sollte man kein Problem mit Fehlern haben,

Da es sich bei abhängigen Objekten um sehr viele handeln kann, kann die Übergabe aller Objekte an den Klassenkonstruktor beispielsweise sehr lang und unklar sein

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

Als ich in Pascal, dann in Delphi "geboren" wurde, habe ich einige Gewohnheiten von dort. Und in Delphi (und FreePascal als Konkurrent) ist diese Praxis sehr häufig. Zum Beispiel gibt es eineTStrings Klasse, die ein Array von Zeichenfolgen verarbeitet und zum Speichern nicht verwendetarrays aber eine andere klasse,TList, das einige nützliche Methoden bietet, währendTStrings ist nur eine Art Schnittstelle. DasTList Objekt ist privat deklariert und hat keinen Zugriff von außen, sondern die Getter und Setter derTStrings.

(nicht wichtig, aber aus irgendeinem Grund) Normalerweise bin ich derjenige, der meine Klassen benutzt.

Erklären Sie mir bitte, ist es wirklich wichtig, das Erstellen von Objekten in Konstruktoren zu vermeiden?

Ich habe gelesendiese Diskussion habe aber noch unklare meinung.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage