Maison  >  Article  >  développement back-end  >  Les méthodes statiques en PHP peuvent-elles accéder aux méthodes non statiques ?

Les méthodes statiques en PHP peuvent-elles accéder aux méthodes non statiques ?

WBOY
WBOYoriginal
2022-03-22 16:54:402144parcourir

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.

Les méthodes statiques en PHP peuvent-elles accéder aux méthodes non statiques ?

L'environnement d'exploitation de cet article : système Windows 10, PHP version 7.1, ordinateur Dell G3.

Les méthodes statiques en PHP peuvent-elles accéder aux méthodes non statiques ?

Que se passe-t-il si nous appelons des méthodes non statiques ? Faites d'abord le test.

<?php
class test{
    function test() {
        echo &#39;it works&#39;;
    }
}
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 &#39;it works&#39;;
    }
    function test2() {
        echo &#39;it works too&#39;;
    }
}
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 &#39;it works&#39;;
    }
}
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!

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