Invocation de méthodes non statiques à l'aide de doubles deux-points (::)
En PHP, les méthodes non statiques ne peuvent pas être invoquées en utilisant la syntaxe de méthodes statiques (class::method). Ce comportement découle de la nature distincte des méthodes statiques et non statiques.
Les méthodes statiques sont définies au sein d'une classe mais ne nécessitent pas d'appel d'une instance de la classe. Ils sont généralement utilisés pour des fonctions utilitaires ou des constantes. En revanche, les méthodes non statiques nécessitent la création d'une instance de la classe avant de pouvoir y accéder.
La syntaxe double deux-points (::) est réservée à l'appel de méthodes statiques. Lorsque vous tentez d'invoquer une méthode non statique à l'aide de cette syntaxe, PHP génère une erreur. Cette erreur n'est pas un problème de configuration mais plutôt une limitation fondamentale du langage.
Exemple :
class Teste { public function fun1() { echo 'fun1'; } public static function fun2() { echo "static fun2" ; } } // Attempt to invoke non-static method using double colon syntax Teste::fun1(); // Raises error // Invocation of static method using double colon syntax Teste::fun2(); // Works as expected
Considérations spéciales
Bien que non- les méthodes statiques ne peuvent pas être invoquées à l’aide de la syntaxe double-point, il existe une exception à cette règle. Au sein d'une méthode non statique, vous pouvez invoquer une méthode non statique de la même classe en utilisant la syntaxe suivante :
$this->nonStaticMethod();
Dans ce contexte, le mot clé $this représente l'instance actuelle de la classe, permettant vous d'accéder à des méthodes non statiques à partir de la même instance. De plus, si vous appelez une méthode non statique de manière statique à partir d'une méthode non statique de la même classe, le $this à l'intérieur de la méthode invoquée fera référence à l'instance de la classe appelante.
Exemple :
class A { public $name; public function test() { echo $this->name; } } class C { public function q() { $this->name = 'hello'; A::test(); } } $c = new C(); $c->q(); // Prints 'hello'
Il est important de noter que cette exception à la règle n'est pas toujours souhaitable. Un rapport d'erreurs strict peut entraîner des erreurs si vous tentez d'utiliser cette syntaxe par inadvertance.
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!