Maison  >  Article  >  développement back-end  >  Pourquoi les classes et les méthodes ne peuvent-elles pas être appelées de manière statique en externe en PHP ?

Pourquoi les classes et les méthodes ne peuvent-elles pas être appelées de manière statique en externe en PHP ?

PHPz
PHPzoriginal
2023-03-24 17:09:591277parcourir

PHP est un langage de programmation largement utilisé, caractérisé par sa syntaxe concise et facile à utiliser, sa vitesse de développement rapide et la prise en charge de plusieurs bases de données. Cependant, certains développeurs PHP peuvent rencontrer un problème : les classes et méthodes ne peuvent pas être appelées de manière statique en externe. Cet article explorera ce problème et fournira une solution.

Qu'est-ce qu'un appel statique ?

Dans le développement PHP, l'appel statique est un moyen d'appeler directement une classe ou une méthode sans instancier l'objet. L'exemple de code est le suivant :

class Car{
   public static function run(){
      echo "the car is running";
   }
}

// 静态调用
Car::run();

Comme mentionné ci-dessus, l'appel statique est un moyen d'accéder à un membre de classe (méthode ou propriété) en utilisant le nom de la classe et l'opérateur double deux-points.

Pourquoi ne peut-on pas l'appeler statiquement en externe ?

En PHP, la principale raison pour laquelle il ne peut pas être appelé statiquement en externe est la restriction des modificateurs d'accès. Si une classe ou une méthode est définie à l'aide du modificateur private ou protected, ses membres ne sont accessibles qu'au sein de la classe. Par conséquent, lorsqu'il est appelé en externe, l'interpréteur PHP refusera la demande d'accès correspondante. privateprotected修饰符进行定义,则只有在类内部才能够访问其中的成员。因此,在外部调用时,PHP解释器将拒绝相应的访问请求。

解决方案:

如果想要在外部静态地调用类或方法,需要将它们定义为公共的(使用public

Solution :

Si vous souhaitez appeler des classes ou des méthodes de manière statique en externe, vous devez les définir comme publiques (en utilisant le modificateur public). Par exemple, disons que nous avons une classe appelée MyClass qui a une méthode statique publique myMethod qui peut être définie comme suit :

class MyClass{
   public static function myMethod(){
      echo "Hello World!";
   }
}
Après avoir défini la méthode dans la classe, elle peut être appelée directement de n'importe où par le nom de la classe, et Là il n'est pas nécessaire d'instancier cette classe. Par exemple, la méthode peut être appelée comme suit dans d'autres fichiers PHP :

MyClass::myMethod();
De plus, l'API de réflexion peut être utilisée pour un accès statique. L'API Reflection est un outil puissant qui peut être utilisé pour obtenir des informations sur les classes et les objets pendant l'exécution de PHP. Le code suivant montre comment utiliser l'API de réflexion pour instancier statiquement une classe et appeler ses méthodes.

class Example{
   public function run(){
       echo "example code";
   }
}

// 使用反射API静态地调用run()函数
$class = new ReflectionClass('Example');
$method = $class->getMethod('run');
$method->invoke(null);
Dans l'exemple de code ci-dessus, une référence à la méthode run() est obtenue en exploitant la classe ReflectionClass et la méthode getMethod(). Ensuite, utilisez la méthode Invoke() pour appeler la méthode. Notez que puisqu'il n'est pas nécessaire d'instancier la classe Exemple ici, une valeur nulle est transmise dans Invoke().

Conclusion

🎜🎜Dans le développement PHP, les appels statiques externes à des classes ou des méthodes peuvent être restreints par des modificateurs d'accès. Pour résoudre ce problème, vous devez définir la classe ou la méthode comme publique et utiliser le nom de la classe et l'opérateur double deux-points pour accéder aux membres de la classe. De plus, l'API de réflexion peut également être utilisée pour un accès statique. Connaître ces informations peut aider les développeurs à mieux utiliser la puissance de PHP. 🎜

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