2016-11-24 4 views
0

J'ai une classe qui ressemble à ceci:Pourquoi est-ce que __get est appelé au lieu de __call quand j'appelle une méthode inexistante?

class MyClass 
{ 
    public __get($prop) 
    { 
     $method = 'get' . ucfirst($prop); 
     if (method_exists($this, $metodo)) 
      return $this->$metodo(); 
     if (property_exists($this, $prop)) 
      return $this->$prop; 

     throw new Exception("Nonexisting property $prop"); 
    } 

    public function __call($method, $args) 
    { 
     $prop = strtr($method, 'add', ''); 
     $prop = lcfirst($prop); 

     if (is_array($this->$prop)) 
      array_push($this->$prop, $args[0]); 
    } 
} 

Mais si je le fais $obj->addTags('test'); appelle __get, sorcière me donne une exception avec le message: « propriété non existant addTags »

Que dois-je faire à mon __call être invoqué au lieu de mon __get?

Merci d'avance!

Répondre

0

Je viens de remplacer strtr pour str_replace. Je n'obtenais pas le bon nom de propriété, alors maintenant ça marche.

Je vais le marquer comme une réponse dès que cela est autorisé par Stack Overflow.

:-D