2010-12-15 20 views
1

ich versuchen, eine Eigenschaft Getter-Methode außer Kraft zu setzen (die durch sfDoctrineRecord verarbeitet :: __ call() Methode) wie folgt aus:Aufschalten Lehre Magie Accessormethode

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

Aber dies führt zu einer Endlosschleife. Ist es möglich und wie?

Antwort

7

wie diese versuchen:

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

auch über benutzerdefinierte Mutatoren und Accessoren lesen.

0

Innerhalb der DoctrineRecord.__call Methode werden Sie sehen call_user_func_array, die versuchen wird, die getProperty Methode der Klasse aufzurufen.

Da Sie getProperty überschrieben haben, ruft es die Child-Klassendefinition auf, so dass es sich selbst aufruft.

+0

Also ist es unmöglich? – Dziamid

+0

Wenn die Methode 'parent :: getProperty()' die '__call'-Methode verwendet, dann bewirkt das Überschreiben von' getProperty', dass parent :: getProperty() 'die untergeordnete Methode immer wieder aufruft. Ich denke, Sie müssen die Funktionalität der übergeordneten getProperty-Methode in Ihrer untergeordneten Klasse duplizieren, um dies zu erreichen. Wenn jedoch die Methode 'getProperty' Ihrer untergeordneten Klasse so einfach ist wie oben gezeigt, sollten Sie sie nicht überschreiben. Die Version der Eltern wird tun, was Sie wollen. – bejonbee

+0

Nein, natürlich nicht, ich wollte etwas Logik anwenden. Danke für Ihre Kommentare, löste es durch den Aufruf der Methode _get() direkt: $ property = $ this -> _ get ('Property') – Dziamid