2017-10-16 54 views
-4

我有兩個班家長和孩子:PHP重載父類的方法是不直接調用

class Post 
{ 
    public function save() 
    { 
     $this->update_data(); 
     $this->custom_updates(); 
     $this->load(); 
    } 

    protected function custom_updates() { /* empty */ } 
} 
class Event extends Post 
{ 
    protected function custom_updates() 
    { 
     //perform custom updates specific for Event objects 
    } 
} 

$Event = new Event(); 
$Event->save(); 
當我執行上面的代碼的方法custom_updates()將由原來的郵政類被稱爲

,不是孩子事件類。有沒有什麼聰明的方法來覆蓋父方法,所以它會被對象使用?或者,唯一的選擇是修改被調用的方法,在這個例子中保存()

class Event extends Post 
{ 
    public function save() 
    { 
     $this->update_data(); 
     $this->custom_updates(); 
     $this->load(); 
    } 

    protected function custom_updates() 
    { 
     //perform custom updates specific for Event objects 
    } 
} 
+1

*「當我執行上面的代碼時,方法'custom_updates()'將從原始Post類調用,而不是子類Event類。」 - 這是不正確的。調用'$ this'的類中的'custom_updates()'方法。檢查出來:https://3v4l.org/SFaLU這是繼承在PHP中的工作原理。 – axiac

+0

您發佈的代碼覆蓋父方法。這基本是一個基本的操作原則。請再次檢查。 –

+0

被調用的方法將是壓倒一切的子方法 - [Demo](https://3v4l.org/leZ3X) –

回答

1

我看不出有任何問題與您的代碼,一切都應該是工作,嘗試做一些var_dump在你的方法並看看輸出是什麼

+0

我的不好,我之前測試過,它沒有工作。現在,當我再試一次時,它的效果非常好。我的錯誤和我爲愚蠢的問題道歉。 – ArturoO

+0

@ArturoO我們都可以通過犯錯來學習 – kellymandem