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 (::) ?

Pourquoi ne puis-je pas appeler des méthodes PHP non statiques à l'aide de l'opérateur Double Colon (::) ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-28 17:14:12357parcourir

Why Can't I Call Non-Static PHP Methods Using the Double Colon (::) Operator?

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!

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