最終關鍵字
Def: Final Keyword 通過在 final 中新增字首來阻止子類覆蓋方法。如果類本身被定義為 final,則無法擴充套件
最終方法
class BaseClass {
public function test() {
echo "BaseClass::test() called\n";
}
final public function moreTesting() {
echo "BaseClass::moreTesting() called\n";
}
}
class ChildClass extends BaseClass {
public function moreTesting() {
echo "ChildClass::moreTesting() called\n";
}
}
// Results in Fatal error: Cannot override final method BaseClass::moreTesting()
最終類:
final class BaseClass {
public function test() {
echo "BaseClass::test() called\n";
}
// Here it doesn't matter if you specify the function as final or not
final public function moreTesting() {
echo "BaseClass::moreTesting() called\n";
}
}
class ChildClass extends BaseClass {
}
// Results in Fatal error: Class ChildClass may not inherit from final class (BaseClass)
最終常量: 與 Java 不同,final
關鍵字不用於 PHP 中的類常量。請改用關鍵字 const
。
為什麼我要使用 final
?
- 防止厄運的大規模繼承鏈
- 鼓勵作文
- 強制開發人員考慮使用者公共 API
- 強制開發人員縮小物件的公共 API
final
類總是可以擴充套件extends
打破了封裝- 你不需要那種靈活性
- 你可以自由更改程式碼
什麼時候避免 final
: 最終的類只能在以下假設下有效運作:
- 最後一個類實現了一個抽象(介面)
- 最終類的所有公共 API 都是該介面的一部分