Maison  >  Article  >  cadre php  >  Analyser l'utilisation de __initialize() et du constructeur de classe __construct() dans ThinkPHP

Analyser l'utilisation de __initialize() et du constructeur de classe __construct() dans ThinkPHP

coldplay.xixi
coldplay.xixiavant
2020-08-12 17:11:562483parcourir

Analyser l'utilisation de __initialize() et du constructeur de classe __construct() dans ThinkPHP

Cet article analyse __initialize() et le constructeur de classe __construct() dans ThinkPHP à travers des exemples. Partagez-le avec tout le monde pour votre référence. L'analyse spécifique est la suivante :

__construct dans thinkphp ne peut pas être utilisé avec désinvolture, car votre classe de module hérite de la classe supérieure et la classe supérieure est définie

Recommandations d'apprentissage associées : thinkphp

1 __initialize() n'est pas une fonction dans la classe php Le constructeur de la classe php est seulement __construct().

2. Initialisation de la classe : si la sous-classe a son propre constructeur (__construct()), elle appellera le sien pour s'initialiser. Sinon, elle appellera le constructeur de la classe parent pour s'initialiser.

3. Lorsque la sous-classe et la classe parent ont des fonctions

, si vous souhaitez appeler la __constrcut() de la classe parent en même temps lors de l'initialisation de la sous-classe, vous pouvez utiliser .__construct()parent::__construct()Si on écrit deux classes, comme suit :


Le code est le suivant :

class Action{  
    public function __construct()  
    {  
        echo 'hello Action';  
    }  
}  
class IndexAction extends Action{  
    public function __construct()  
    {  
        echo 'hello IndexAction';  
    }  
}  
$test = new IndexAction;  
//output --- hello IndexAction

Evidemment, lors de l'initialisation de la sous-classe IndexAction, la sienne Le constructeur sera appelé, donc la sortie est 'hello IndexAction', mais modifiez la sous-classe en :


Le code est le suivant :

class IndexAction extends Action{  
    public function __initialize()  
    {  
        echo 'hello IndexAction';  
    }  
}

Ensuite, la sortie est 'hello Action' , parce que la sous-classe IndexAction n'a pas elle-même de constructeur, que se passe-t-il si je veux appeler le constructeur de la classe parent en même temps lors de l'initialisation de la sous-classe


Le code est le suivant :

class IndexAction extends Action{  
    public function __construct()  
    {  
        parent::__construct();  
        echo 'hello IndexAction';  
    } 
    }

De cette façon, les deux phrases peuvent être combinées en même temps. Sortie, bien sûr, une autre façon est d'appeler la méthode de la sous-classe dans la classe parent


Le code est. comme suit :

class Action{  
    public function __construct()  
    {  
        if(method_exists($this,'hello'))  
        {  
            $this -> hello();  
        }  
        echo 'hello Action';  
    }  
}  
class IndexAction extends Action{  
    public function hello()  
    {  
        echo 'hello IndexAction';  
    }  
}

De cette façon, deux phrases peuvent également être affichées en même temps, et ici La méthode hello() dans la classe est similaire à __initialize() dans ThinkPHP.

Par conséquent, l'apparition de

dans ThinkPHP est uniquement destinée à permettre aux programmeurs d'éviter une utilisation fréquente de

lors de l'écriture de sous-classes, et en même temps d'appeler correctement le constructeur de la classe parent dans le framework, donc, lors de l'initialisation d'une sous-classe dans ThnikPHP, utilisons __initialize() au lieu de __initialize(). Bien sûr, vous pouvez également modifier la fonction __initialize() en votre nom de fonction préféré en modifiant le framework parent::__construct()__construct() Recommandations associées :

Cours vidéo de programmation

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer