php 之 Final 关键字
本來想寫匿名類的=。=。。不過是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
發現方法被成功調用,如果我們嘗試修改以下呢?如下代碼:
以上代碼我們直接在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。
總結
以上是生活随笔為你收集整理的php 之 Final 关键字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php Trait 基础应用讲解
- 下一篇: php之clone 复制对象以及__cl