Cet article présente principalement l'analyse des différences et des similitudes entre new static() et new self() en PHP. C'est une compétence très pratique Je pense que cela peut apporter des avantages. tout le monde apprend la programmation PHP.
Le problème est causé par la construction d'un site localement. J'ai trouvé qu'il ne peut pas être construit avec PHP 5.2. Le site Web Code PHP contient de nombreuses parties supérieures à 5.3 et nécessitent des modifications pour fonctionner sous 5.2.
Après avoir changé d'endroit, j'ai trouvé un endroit
return new static($val);
Ce foutu cheval est incroyable, je ne l'ai vu qu'avant
return new self($val);
Alors j'ai vérifié en ligne et les deux diffèrent.
self - C'est cette classe, cette classe dans le segment de code.
static - PHP 5.3 ajoute uniquement la classe actuelle, ce qui ressemble un peu à $this. Elle est extraite de la mémoire tas et accède à la classe actuellement instanciée, donc static représente cette classe.
Jetons un coup d'œil à l'explication professionnelle de l'étranger :
self fait référence à la même classe dans laquelle la méthode dans laquelle la nouvelle opération a lieu.
statique en retard dans PHP 5.3 les liaisons statiques font référence à la classe de la hiérarchie sur laquelle vous appelez la méthode.
Dans l'exemple suivant, B hérite des deux méthodes de A. self est lié à A car il est défini dans l'implémentation par A de la première méthode, alors que static est lié à la classe appelée (voir aussi get_call_class() ).
class A { public static function get_self() { return new self(); } public static function get_static() { return new static(); } } class B extends A {} echo get_class(B::get_self()); // A echo get_class(B::get_static()); // B echo get_class(A::get_static()); // A
Cet exemple est fondamentalement compréhensible en un coup d'œil.
Je comprends le principe, mais le problème n'est pas encore résolu. Comment résoudre le problème du return new static($val);?
En fait, c'est aussi simple que d'utiliser get_class($this); Le code est le suivant :
class A { public function create1() { $class = get_class($this); return new $class(); } public function create2() { return new static(); } } class B extends A { } $b = new B(); var_dump(get_class($b->create1()), get_class($b->create2())); /* The result string(1) "B" string(1) "B" */
Les amis intéressés peuvent tester l'exemple de code et je pense qu'il y aura du nouveau des gains !
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!