Maison >développement back-end >tutoriel php >Pourquoi ne puis-je pas appeler des méthodes PHP non statiques à l'aide de l'opérateur Double Colon (::) ?
Comprendre l'invocation de méthode non statique avec Double Colon (::)
Lors de la tentative d'appel d'une méthode non statique à l'aide de la syntaxe de méthodes statiques (class::method), vous pouvez rencontrer une erreur. Contrairement à un problème de configuration, ce comportement est intrinsèque à la conception de PHP.
En PHP, les méthodes non statiques nécessitent d'abord la création d'une instance pour pouvoir être invoquées. L'erreur se produit car lors de l'utilisation de la syntaxe class::method, aucune instance n'est explicitement fournie.
Distinction entre les méthodes statiques et non statiques
Les méthodes statiques peuvent être appelées sans une instance de la classe, tandis que les méthodes non statiques nécessitent une instance. Cette distinction est évidente dans l'exemple ci-dessous :
class Teste { public function fun1() { echo 'fun1'; } public static function fun2() { echo "static fun2" ; } } Teste::fun2(); // This is valid because fun2 is a static method Teste::fun1(); // This will generate an error because fun1 is not a static method
Comportement incohérent
Cependant, PHP présente un comportement incohérent avec les méthodes non statiques appelées statiquement. Si une méthode non statique est appelée statiquement depuis une méthode non statique de la même classe, $this dans la méthode non statique fera référence à l'instance actuelle de la classe.
class A { public function test() { echo $this->name; } } class C { public function q() { $this->name = 'hello'; A::test(); } } $c = new C; $c->q(); // This will print 'hello'
Ce comportement peut être considéré comme erroné avec le rapport d'erreurs strict activé.
Conclusion
L'appel de méthodes non statiques à l'aide de la syntaxe des méthodes statiques est généralement déconseillée. Cela peut entraîner un comportement inattendu ou des erreurs. Au lieu de cela, il est recommandé d'utiliser la syntaxe appropriée pour appeler des méthodes non statiques, ce qui implique de créer une instance de la classe, puis d'appeler la méthode sur cette instance.
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!