Les méthodes statiques en PHP peuvent accéder aux méthodes non statiques. En instanciant un objet, vous pouvez appeler des méthodes non statiques dans l'objet ; bien que les méthodes statiques puissent appeler des méthodes non statiques, elles ne peuvent pas appeler des constructeurs.
L'environnement d'exploitation de cet article : système Windows 10, PHP version 7.1, ordinateur Dell G3.
Que se passe-t-il si nous appelons des méthodes non statiques ? Faites d'abord le test.
<?php class test{ function test() { echo 'it works'; } } test::test(); ?>
Exécutez ce qui suit et l'erreur renvoyée est la suivante :
Fatal error: Non-static method test::test() cannot be called statically in /home/×××/test.php on line 7 Call Stack: 0.0002 332548 1. {main}() /home/×××/test.php:0
À ce stade, vous pensez peut-être qu'appeler des méthodes non statiques de manière statique n'est pas réalisable, mais en fait, il est trop tôt pour tirer une conclusion, car la méthode test() est assez particulière, du même nom que la classe, c'est la méthode constructeur. Nous continuons les tests.
<?php class test { function test() { echo 'it works'; } function test2() { echo 'it works too'; } } test::test2(); ?>
Résultat de l'exécution :
it works too
Cela montre que l'appel statique de méthodes non statiques est réalisable, mais l'appel statique de constructeurs n'est pas autorisé. Afin de vérifier cette conclusion, j'ai fait le test suivant :
<?php class test{ static function test() { echo 'it works'; } } test::test(); ?>
Les résultats d'exécution sont les suivants :
Fatal error: Constructor test::test() cannot be static in /home/xxx/test.php on line 9
Le constructeur ne peut pas être déclaré statique, donc l'inférence ci-dessus est correcte.
Mais ce résultat est en effet très spécial, car peut-être que seul PHP peut appeler statiquement des méthodes non statiques J'ai fait une expérience avec Java Si la méthode non statique est appelée statiquement, l'erreur suivante sera signalée :
Cannot make a static reference to the non-static method showString() from the type HelloWorldApp
Je n'ai pas d'autres langages. Un essai, mais cela suffit pour expliquer les particularités de PHP. Je n'ai trouvé aucune explication pertinente sur la raison pour laquelle PHP a une telle situation.
Apprentissage recommandé : "Tutoriel vidéo 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!