php 之 Final 關鍵字
阿新 • • 發佈:2019-01-23
本來想寫匿名類的=。=。。不過是php7才支援,相比大家可能版本一般不會那麼高,所以我就不寫了。
引用手冊中的話:
PHP 5 新增了一個 final 關鍵字。如果父類中的方法被宣告為 final,則子類無法覆蓋該方法。如果一個類被宣告為 final,則不能被繼承。
那麼意思說如果有一個final修飾了一個方法,那麼我們在繼承的類裡面就不能重寫他,或者說覆蓋他。那麼我們依然繼承了這個方法。我們看以下程式碼:
<?php
class BaseClass {
public function test() {
echo "use test\n";
}
final public function moreTesting() {
echo "use moreTesting\n";
}
}
class ChildClass extends BaseClass {
}
$obj=new ChildClass();
$obj->moreTesting();
?>
以上程式碼是手冊裡面的示例,我稍作修改了以下,讓大家看起來爽一點,字不多。好了我們最後兩句是新建childclass類,然後呼叫moreTesting方法,然而我們在基類BaseClass裡面用final修飾了,那麼我們將不能覆蓋此方法,但是可以呼叫,我們執行一下發現將會輸出:
use moreTesting
發現方法被成功呼叫,如果我們嘗試修改以下呢?如下程式碼:
class ChildClass extends BaseClass {
public function moreTesting() {
echo "use moreTesting1111111\n";
}
}
以上程式碼我們直接在childclass裡面重寫方法,或者說覆蓋方法,結果執行將會報錯:
PHP Fatal error: Cannot override final method BaseClass::moreTesting()
那我們現在來試一下用final修飾類:
final class BaseClass {
public function test() {
echo "use test\n";
}
final public function moreTesting() {
echo "use moreTesting\n";
}
}
然後我們在此執行一下程式碼,然後將會出現
Fatal error: Class ChildClass may not inherit from final class
唔,那麼這個final應該就理解差不多了吧=。=。。。
注:屬性不能被定義為 final,只有類和方法才能被定義為 final。