Pourquoi PHP peut-il appeler directement les méthodes non statiques d'une classe via :: ?
滿天的星座
滿天的星座 2017-06-10 09:47:28
0
7
559

Le code est le suivant :

<?php

class Demo
{
    public function testing()
    {
        echo "testing\n";
    }
}

Demo::testing();

Sortie d'exécution php7.0 :

$ php demo.php 
testing

Sortie d'exécution php5.6

$ php demo.php
PHP Strict Standards:  Non-static method Demo::testing() should not be called statically in /home/runner/Code/funny/demo.php on line 11

testing

Il existe aussi ce genre d'opération ?? Quel est le principe ??

滿天的星座
滿天的星座

répondre à tous(7)
大家讲道理

http://www.laruence.com/2012/...

Hahaha, merci à tous pour vos réponses. Pour les raisons spécifiques, veuillez lire l'article de frère Bird ci-dessus

.
小葫芦

Si une classe inférieure à la version 5.6 appelle directement des méthodes et des attributs sans instanciation, les méthodes et les attributs doivent être des méthodes statiques, c'est-à-dire que si la classe Demo appelle directement la méthode de test, le test doit être public static function testing() { }. Sinon, une erreur sera signalée.
Je ne sais pas s'il n'est pas nécessaire de déclarer quoi que ce soit au-dessus de 7,0

扔个三星炸死你

Je l'ai vu, mais php-cli peut l'exécuter, mais php-fpm ne le peut toujours pas

Deprecated: Non-static method Demo::testing() should not be called statically in test.php on line 11

testing

某草草

Bien que cela puisse être utilisé, ce n'est pas recommandé.

習慣沉默

php7.0 peut être écrit comme ceci, mais php5.6 ne peut certainement pas être écrit comme self::testing

.
大家讲道理

__callStatic()

学习ing

On peut considérer que la mise en œuvre de PHP n'est pas rigoureuse.

Si $this n'est pas utilisé dans la méthode non statique, vous pouvez utiliser :: pour l'appeler.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal