2014-09-22 42 views
0

我想從它的具有相同方法名稱的子級調用父級方法。這樣做會導致嚴格的標準錯誤。重命名子方法有一個簡單的解決方案。但是,有沒有辦法讓這兩種方法的名稱保持一致而沒有標準警告?謝謝。從實例化的孩子調用父級不符合嚴格的標準

嚴格的標準:兒童:: getContentFromDb()的聲明應該與家長兼容:: getContentFromDb上線XXX($ ID)在/foo/Child.class.php

僞代碼示例:

class Parent { 
    protected function getInfoFromDb($id) { 
     return $infoFromDb; 
    } 
} 

class Child extends Parent { 
    public static $id = xx; 
    public $info = array(); 

    public function __construct() { 
     $this->info = $this->getInfoFromDb(); 
    } 

    public function getInfoFromDb() { 
     // the line below causes the problem 
     return parent::getInfoFromDb(self::$id); 
    } 
} 

回答

1

您的方法覆蓋應該採用與您覆蓋的參數列表相同的參數列表。

例如

class ParentClass { 

    protected function getInfoFromDb($id) { 
     return "INFO FROM DB:" . $id; 
    } 
} 

class Child extends ParentClass { 
    public static $id = "xx"; 
    public $info = array(); 

    public function __construct() { 
     $this->info = $this->getInfoFromDb(); 
    } 

    /** 
    * @param specific ID, or do not set for default action. 
    * @return string 
    */ 
    public function getInfoFromDb($id = false) { 
     return parent::getInfoFromDb(self::$id); 
    } 
}