Cuando se subclasan objetos y se desea extender el código de inicialización, existen dos enfoques. Reemplazando __construct(), e implementando un método de inicialización que tu constructor de la superclase llama.Práctica recomendada, anulando __construct() versus método init()
Método 1:
class foo
{
public function __construct ($arg1, $arg2, $arg3)
{
// Do initialization
}
}
class bar extends foo
{
public function __construct ($arg1, $arg2, $arg3)
{
parent::__construct ($arg1, $arg2, $arg3);
// Do subclass initialization
}
}
Método 2
class foo
{
public function init()
{
// Dummy function
}
public function __construct ($arg1, $arg2, $arg3)
{
// Do subclass defined initialization
$this -> init();
// Do other initialization
}
}
class bar extends foo
{
public function init()
{
// Do subclass initialization
}
}
La documentación de Zend Framework parece desalentar a los constructores de primer orden y que quiere reemplazar los métodos init, donde esté previsto, pero esto de alguna manera simplemente doesn' me siento bien conmigo Zend también tiende a hacer algunas cosas con las que no estoy contento, así que no estoy seguro si debería usarse como un ejemplo de las mejores prácticas. Personalmente creo que el primer enfoque es el correcto, pero he visto el segundo enfoque con la frecuencia suficiente como para preguntarme si eso es realmente lo que debería estar haciendo.
¿Tiene algún comentario sobre la anulación de __construct? Sé que debes tener cuidado de recordar invocar el constructor de la superclase, pero la mayoría de los programadores deben tenerlo en cuenta.
EDIT: no estoy usando Zend, sólo estoy usando como un ejemplo de una base de código que le anima a utilizar init() en lugar de __construct primordial().
Lo siento, debería haber sido un poco más claro en mi pregunta. No estoy usando Zend, estoy trabajando en un código que planeo lanzar al público en algún momento en el futuro si lo considero útil. Solo estaba usando Zend como ejemplo, ya que tiende a usar el método init, y si un marco principal está haciendo eso, entonces debe haber una razón. (incluso si personalmente no me gusta mucho el framework en cuestión) – GordonM
Ah, cierto. Puede valer la pena editar y poner eso en su pregunta. He editado por respuesta. –