我建議你閱讀關於Polymorphism。
來自父類的ShowError()
的調用將由實例的類確定,並在運行時完成。
爲了證明,考慮下面的代碼:
<?PHP
abstract class dbCon {
public function OpenConnection() {
// Do Something;
// On error:
$this->ShowError();
}
abstract function ShowError();
}
class ErrorHandling extends dbCon {
public function ShowError() {
// Show error
echo "Error is here\n";
}
}
class WarningHandling extends dbCon {
public function ShowError() {
// Show waring
echo "Warning is here\n";
}
}
$ErrorHandling = new ErrorHandling();
$ErrorHandling->OpenConnection();
$WarningHandling = new WarningHandling();
$WarningHandling->OpenConnection();
?>
運行時,您將獲得:
Error is here
Warning is here
爲什麼?
因爲,第一個ShowError()
是來自ErrorHandling
類型的對象。 PHP看到該對象來自具體類型ErrorHandling
,所以當從OpenConnection
調用ShowError()
時,php使用來自對象類型(ErrorHandling
)的函數。
第二個ShowError()
調用來自WarningHandling
的對象,所以PHP使用的是WarningHandling
的ShowError()
。
仔細看看Polymorphism。多態性是面向對象最重要的概念之一(因爲它只是基於對象的面向對象而缺失的一個概念)。
希望這會有所幫助。
我看不出哪裏出了問題。我運行代碼,它工作正常。函數ShowError將被委派給實例的具體類中的方法(所以如果你的對象被創建爲ErrorHandling,它將調用ErrorHandling的ShowError())。這稱爲多態性。你能告訴我你說的缺陷在哪裏嗎? – NawaMan 2009-11-06 10:58:36
@NawaMan:我認爲它不會被定向到ErrorHandling類中的ShowError()。我不是在遵循它如何認識到ShowError()存在於不同的類中? – RKh 2009-11-06 11:03:54
@Rohit:請看我的回答。歡呼!!! – NawaMan 2009-11-06 11:15:04