Les meilleures pratiques, en substituant __construct() rapport fournissant méthode init()

Lorsque vous êtes sous-classement d'objets et que vous voulez étendre le code d'initialisation, il y a deux approches. Primordial __construct(), et la mise en œuvre d'une méthode d'initialisation de votre constructeur de la superclasse des appels.

Méthode 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éthode 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 documentation pour le Zend Framework semble décourager primordial constructeurs et veut que vous le remplacer init méthodes, le cas échéant, mais ce en quelque sorte ne fonctionne tout simplement pas pour moi. Zend a aussi tendance à faire quelques petites choses que je ne suis pas heureux avec donc je ne sais pas si elle devrait être utilisée comme un exemple de meilleure pratique. Personnellement, je pense que la première approche est la bonne, mais j'ai vu la deuxième approche assez souvent pour me demander si c'est réellement ce que je devrais faire.

Avez-vous des commentaires au sujet primordial __construct? Je sais que vous devez être prudent de se rappeler d'invoquer le constructeur de la superclasse, mais la plupart des programmeurs doivent en être conscients.

EDIT:
Je ne suis pas à l'aide de Zend, je suis le seul à l'utiliser comme un exemple de code qui vous encourage à utiliser la fonction init() au lieu de l'annulation de __construct().

InformationsquelleAutor GordonM | 2011-11-21