Maison > développement back-end > Problème PHP > 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
Libérer: 2023-03-15 16:36:01
original
2188 Les gens l'ont consulté

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();
?>
Copier après la connexion

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
Copier après la connexion

À 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();
?>
Copier après la connexion

Résultat de l'exécution :

it works too
Copier après la connexion

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();
?>
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion
.

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!

Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal