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).
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. –
jeter un peu plus de lumière sur votre question. – diEcho
double possible de [Appel de la méthode statique non statique] (http://stackoverflow.com/questions/15707029/calling-static-method-non-statically) – Ejaz