2010-12-15 70 views
1

je tente de passer outre une méthode de lecture de la propriété (qui est traité par la méthode sfDoctrineRecord :: __ call()) comme ceci:Remplacer la doctrine de la méthode accesseur magique

//myClass.class.php 
public function getProperty() 
{ 
    $property = parent::getProperty(); 
    //the following line is never reached 
    return $property; 
} 

Mais cela se traduit par une récursion infinie. Est-ce possible et comment?

Répondre

7

Essayez comme ceci:

public function getProperty() 
{ 
    $property = $this->_get('property'); 
    //the following line is never reached 
    return $property; 
} 

Aussi, lisez muteurs personnalisés et accesseurs.

0

Dans la méthode DoctrineRecord.__call, vous verrez qu'il utilise call_user_func_array, qui va essayer d'appeler la méthode getProperty de la classe.

Depuis que vous avez dépassé getProperty, il appelle la définition de classe enfant, donc il s'appelle lui-même.

+0

Alors, c'est impossible? – Dziamid

+0

Si la méthode 'parent :: getProperty()' utilise la méthode '__call', alors oui, en remplaçant' getProperty', 'parent :: getProperty()' appellera la méthode enfant encore et encore. Je pense que vous devrez dupliquer la fonctionnalité de la méthode parent getProperty dans votre classe enfant pour accomplir ceci. Cependant, si la méthode 'getProperty' de votre classe enfant est aussi simple que vous le montrez ci-dessus, vous ne devriez pas avoir besoin de la surcharger du tout. La version du parent fera ce que vous voulez. – bejonbee

+0

Non, parce que non, j'allais appliquer une certaine logique. Merci pour vos commentaires, résolu en appelant directement la méthode _get(): $ property = $ this -> _ get ('Propriété') – Dziamid