2012-03-27 58 views
0

我剛剛與OOP PHP握手,雖然我已經理解了它,但我在final關鍵字中遇到了一些問題。本書說,Final停止子類方法,覆蓋超類方法。下面我試過了,我的IDE顯示了一些錯誤,但它不起作用。我看了看,但書中說這應該啓用超類方法而不是子類。爲最終方法定義子類方法時的錯誤

$object=new userprofile(); 
$object->name="Mike"; 
$object->age=22; 
$object->sex="Male"; 

//2 properties of subclass 
$object->email="[email protected]"; 
$object->website="http://domain.com"; 

echo $object->get_name(); //method call 

class user{ 
    public $name, $age, $sex; 

    final function get_name(){ 
     return "Not overriden"; 
    } 
} 

class userprofile extends user{ 
    public $email,$website; 

    function get_name(){ 
     return $this->website; 
    } 
} 
+1

如果你運行腳本,你會得到什麼錯誤? – JJJ 2012-03-27 17:07:54

+0

嗨Juhana ..致命錯誤:無法覆蓋最後一個方法用戶:: get_name()在H:\ xampp \ htdocs \ PHP_testers \ objects_OOP \ object_inheritence.php在第41行 – 2012-03-27 17:09:23

回答

1

正如錯誤消息所述,您不能定義一個方法來覆蓋已標記爲final的方法。你甚至不被允許嘗試(你爲什麼會這樣做,因爲新方法不會有任何效果)。

另請參閱documentation for the final keyword在第一個示例中對此進行了描述。

1

這聽起來像你自己回答。通過在基類上定義關鍵字final,您不能在子類中重寫它。刪除final關鍵字以覆蓋它。

+0

這意味着子類('userprofile' )不能覆蓋附加了「final」關鍵字的父('user')方法。它用於讓父類控制子類可以和不能覆蓋的內容。從子類中完全刪除該方法將啓用父類的方法。 – jeremyharris 2012-03-27 17:26:34