2010-12-15 135 views
1

我嘗試重寫一個屬性的getter方法,這樣的(這是由sfDoctrineRecord :: __()方法調用處理):覆蓋學說魔術訪問方法

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

但是這會導致無限遞歸。這是可能的和如何?

回答

7

嘗試這樣的:

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

此外,閱讀有關自定義存取器和存取。

0

DoctrineRecord.__call方法中,您會看到它使用call_user_func_array,它將嘗試調用該類的getProperty方法。

由於您已覆蓋getProperty,因此它正在調用子類定義,因此它正在調用它自己。

+0

那麼,這是不可能的? – Dziamid 2010-12-15 18:04:13

+0

如果'parent :: getProperty()'方法使用'__call'方法,那麼是的,重寫'getProperty'將會導致'parent :: getProperty()'一次又一次地調用子方法。 我認爲你需要在你的子類中複製父類getProperty方法的功能來完成這個功能。 但是,如果您的子類的'getProperty'方法如上所示那樣簡單,則根本不需要重寫它。父母的版本會做你想要的。 – bejonbee 2010-12-15 18:16:13

+0

不,原因不是,我打算申請一些邏輯。感謝您的評論,通過直接調用_get()方法來解決它:$ property = $ this - > _ get('Property') – Dziamid 2010-12-15 18:25:28