¿Por qué no "crear una instancia de un nuevo objeto dentro del constructor de objetos"?

Respondí una preguntaenlazar) que utilicé una creación del nuevo objeto en el constructor de otra clase, aquí el ejemplo:

class Person {
  public $mother_language;

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

Y recibí el comentario del usuario "Matija" (su perfil) y escribió:Nunca debe crear una instancia de un nuevo objeto dentro de consturctor de objetos, las dependencias deben ser empujadas desde afuera, para que cualquiera que use esta clase sepa de qué depende esta clase.

En general, puedo estar de acuerdo con esto, y entiendo su punto de vista.

Sin embargo, solía hacer esto de esta manera muy a menudo, por ejemplo:

como las propiedades privadas, otras clases me dan una funcionalidad que puedo resolver sin duplicar el código, por ejemplo, puedo crear una lista (clase implementadaArrayAccess interfaz) de objetos), y esta clase se usaría en otra clase, que tiene tal lista de objetos,algunas clases usan por ejemploDateTime objetos,si yoinclude (o carga automática) de la clase dependiente, uno no debería tener problemas con los errores,

Debido a que los objetos dependientes pueden ser un número muy grande, pasarlos todos al constructor de la clase puede ser muy largo y poco claro, por ejemplo.

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

Como nací en Pascal, luego en Delphi, tengo algunos hábitos a partir de ahí. Y en Delphi (y FreePascal como su competidor) esta práctica es muy frecuente. Por ejemplo, hay unTStrings clase que maneja la matriz de cadenas, y para almacenarlas no usaarrays pero otra clase,TList, que proporciona algunos métodos útiles, mientras queTStrings Es solo una especie de interfaz. losTList El objeto es privado declarado y no tiene acceso desde el exterior, pero los captadores y definidores de laTStrings.

(No es importante, pero por alguna razón) por lo general soy yo quien usa mis clases.

Por favor, explícame, ¿es realmente importante evitar la creación de objetos en los constructores?

he leídoesta discusión Pero aún no tengo la mente clara.

Respuestas a la pregunta(6)

Su respuesta a la pregunta