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 ?

Pourquoi ne puis-je pas appeler des méthodes PHP non statiques en utilisant la syntaxe à deux points ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-03 21:13:12374parcourir

Why Can't I Call Non-Static PHP Methods Using the Double-Colon Syntax?

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!

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