Final是PHP中的一種關鍵字,用于定義類、方法和屬性的狀態。當類、方法或屬性被聲明為final時,它們將不會有任何子類或者其他代碼修改它們的定義。Final通常用于保護類、方法或屬性不被繼承或修改。
例子1: 下面的代碼定義了一個抽象類Person,抽象類中有一個用于獲取姓名的方法getName(); 同時定義了一個繼承自Person的子類User,User中也有一個getName(); 現在,我們可以為Person類建立一個子類Teacher,它們原來的getName()方法不再適用,我們很自然會想到在Teacher類中重寫getName()方法,但如果我們把Person類的getName()方法聲明為final,則Teacher類就無法重寫這個方法了:
abstract class Person { final public function getName() { return $this->name; } } class User extends Person { public $name = '張三'; } class Teacher extends Person { public $name = '李四'; } $person = new User(); echo $person->getName(); //輸出:"張三" $teacher = new Teacher(); echo $teacher->getName(); // 報錯!不能重寫 getName() 方法。
例子2: 我們還可以在方法上使用final關鍵字,禁止子類對方法進行重寫。例如:
class ParentClass { final public function sayHello() { echo "Hello, World!"; } } class ChildClass extends ParentClass { public function sayHello() { // 報錯!不能重寫 sayHello() 方法。 echo "Goodbye, cruel world!"; } }
例子3: final也可以在屬性上使用,禁止其他方法修改這個屬性的值。例如:
class Person { final public $name = '張三'; } class Employee extends Person { public function changeName() { // 報錯!不能修改 $name 的值。 $this->name = '李四'; } } $employee = new Employee(); echo $employee->name; //輸出:"張三"
總的來說,final關鍵字可以在類、方法和屬性上使用,用于保護它們不被修改。這種方式可以在組件化開發中避免出現競爭條件和維護性問題。在一定程度上還可以提高代碼的可讀性,讓開發人員可以更好地理解代碼的功能和意圖。