Maison >développement back-end >tutoriel php >Pourquoi ne puis-je pas appeler des méthodes PHP non statiques en utilisant la syntaxe à deux points ?
Appel de méthodes non statiques avec la syntaxe à double-colon
En PHP, il est courant d'appeler des méthodes statiques en utilisant la syntaxe à double-colon, tel que ClassName::methodName(). Cependant, tenter d'invoquer une méthode non statique avec cette syntaxe peut prêter à confusion.
Pourquoi la syntaxe à deux points ne fonctionne pas pour les méthodes non statiques
Contrairement aux méthodes statiques, les méthodes non statiques nécessitent une instance de la classe pour fonctionner. Lorsqu'une méthode non statique est appelée avec ClassName::methodName(), PHP l'interprète comme une méthode statique, ce qui n'a pas de sens pour les méthodes qui nécessitent des variables d'instance spécifiques ou un accès au mot-clé $this.
La saisie lâche de PHP
PHP gère différemment les méthodes statiques et non statiques, mais il est important de noter que PHP est relativement lâche à cet égard. Même si l'appel d'une méthode non statique avec une syntaxe à double-point est techniquement incorrect, PHP peut toujours l'autoriser dans certaines circonstances.
Cependant, ce comportement peut conduire à des résultats ou à des erreurs inattendus, en particulier lors de l'utilisation d'un rapport d'erreurs strict. . Dans de tels cas, PHP générera une erreur indiquant que la méthode non statique doit être appelée sur un objet.
Référence à $this à partir des méthodes non statiques
Fait intéressant , PHP permet d'appeler une méthode non statique de manière statique depuis une autre méthode non statique de la même classe. Dans ce cas, le mot clé $this dans la méthode appelée fera référence à l'instance de la classe appelante.
Par exemple, considérons le code suivant :
class A { public function test() { echo $this->name; } } class C { public function q() { $this->name = 'hello'; A::test(); } } $c = new C; $c->q(); // prints hello
Dans cet exemple, le La méthode test() de la classe A est appelée statiquement à partir de la méthode q() de la classe C. Le mot clé $this dans test() fait référence à l'instance de C ($c), permettant au code d'accéder à la propriété name et d'imprimer "bonjour ."
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!