Maison  >  Article  >  développement back-end  >  Explication détaillée du constructeur en php7

Explication détaillée du constructeur en php7

黄舟
黄舟original
2017-07-02 09:51:193947parcourir

Lors du développement avec php7, j'ai rencontré :

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; index has a deprecated constructor

Cette invite est normale et semble facile à comprendre, et elle est incluse dans de nombreux articles présentant php7. Nous l'avons tous. a mentionné que lorsque la fonction avec le même nom que la classe dans php7 est utilisée comme constructeur , cette invite sera lancée. Il est recommandé d'utiliser construct comme constructeur, comme ecshop. . Il existe de nombreuses situations dans le code qui utilisent des fonctions portant le même nom que la classe comme constructeurs.

Mais j'ai trouvé que le contrôleur de thinkphp a toujours la méthode d'index dans le contrôleur d'index, et je n'ai pas trouvé que cette invite serait lancée lorsque je l'utiliserais.

J'ai donc parcouru le code, mais d'après les informations et les tests, j'ai trouvé qu'il y a plusieurs situations :

1 S'il y a à la fois une construction (classe non parent) et une. fonction avec le même nom que le nom de classe dans une classe , alors construct est un constructeur et la fonction avec le même nom est traitée comme une fonction ordinaire

2. (même si elle est publique) mais pas la sous-classe, et la sous-classe a Une fonction du même nom est un constructeur. Si vous utilisez get_class_methods($this); pour obtenir la méthode de la classe, vous constaterez qu'il existe en fait une méthode de construction

3. Il y a cette phrase dans le manuel officiel de php :

.

Depuis PHP 5.3.3 Désormais, dans l' espace de noms , la méthode portant le même nom que le nom de la classe ne sera plus utilisée comme constructeur. Ce changement n'affecte pas les classes qui ne sont pas dans l'espace de noms

Lors du test de certaines conjectures, les espaces de noms ne sont généralement pas utilisés. En regardant le code source de thinkphp, il n'y a aucun traitement spécial nulle part, et il reste toujours dans le. deux premières situations, très perplexe.

Heureusement, j'ai trouvé la troisième situation dans le manuel officiel de PHP et j'ai finalement compris pourquoi il n'y a pas une telle invite dans thinkphp, car thinkphp utilise des espaces de noms.

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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn