2013-04-02 3 views
0

Je suis tombé sur quelque chose comme ça, et je ne suis pas sûr de savoir quoi faire. Y a-t-il une bonne raison de le faire ou de l'éviter?Appeler une méthode statique de manière non statique

class Foo { 

    static public function bar() {} 

} 

someMethod() { 

    $instanceOfFoo->bar(); 

} 
+0

S'il s'agissait d'une autre langue, il y aurait probablement une erreur. J'imagine que soit il a été écrit par un débutant qui a oublié d'être déclaré statique ou par un expert qui en profite en faisant des choses différentes selon le contexte. Je recommande fortement de le refactoriser en deux méthodes, l'une statique et l'autre non. –

+0

jeter un peu plus de lumière sur votre question. – diEcho

+0

double possible de [Appel de la méthode statique non statique] (http://stackoverflow.com/questions/15707029/calling-static-method-non-statically) – Ejaz

Répondre

4

La documentation PHP dit:

[...] Une propriété déclarée comme statique ne peut pas être accessible avec un objet de classe instanciée (si une méthode statique peut). [...] Les propriétés statiques ne sont pas accessibles via l'objet à l'aide de l'opérateur de flèche ->.

sans spécifier quoi que ce soit de spécial pour les méthodes statiques appelées par ->. Vous devriez certainement l'éviter cependant, car cela provoque une confusion chez le lecteur qui attend $obj->meth() d'être une méthode non statique et Cls::meth() une méthode statique.

Étonnamment ce comportement is not triggering toute erreur. La raison en est qu'une méthode statique, appelée par $object->method() est traduite en interne à className::method() lors de l'exécution (avec la seule différence étant que $this = NULL est défini).

0

Vous pouvez appeler la fonction particulière ci-dessous.

Foo::bar(); 

Vous n'avez pas besoin de créer un objet pour appeler une fonction statique. Fondamentalement, nous écrivons des fonctions statiques pour appeler la fonction sans une instance de la classe dans laquelle elle est définie.

Il est correct d'appeler une fonction statique avec un objet mais pourquoi le faire quand vous avez une méthode plus simple et plus propre.

+0

Je pense que la question demande ce qu'il faut penser du code qui appelle une méthode statique à travers une instance, pas comment appeler une méthode statique. En fait, je pense que l'affiche est bien consciente de l'utilisation traditionnelle des membres statiques. –

+1

Je lui ai donné mon point de vue en disant que ce qu'il a écrit n'est pas nécessaire. – Techie

Questions connexes