The use of final keyword is just like that occurs in Java
In java final has three uses
1) prevent class Inheritance
2) prevent method overriding or redifination of
method in subclass
3) and to declare constants
But the third point seems to be missing from the PHP
I guess, as i am a java developer Currently gaining competence in PHP
Final 키워드
PHP 5는 자식 클래스가 메쏘드를 덮어 쓰는 것을 막도록, final 키워드를 지원합니다. 정의시에 final을 앞에 붙이면 됩니다. 클래스 자체를 final로 정의하면 상속할 수 없습니다.
Example #1 Final 메쏘드 예제
<?php
class BaseClass {
public function test() {
echo "BaseClass::test() 호출\n";
}
final public function moreTesting() {
echo "BaseClass::moreTesting() 호출\n";
}
}
class ChildClass extends BaseClass {
public function moreTesting() {
echo "ChildClass::moreTesting() 호출\n";
}
}
// 결과는 Fatal error: Cannot override final method BaseClass::moreTesting()
?>
Example #2 Final 클래스 예제
<?php
final class BaseClass {
public function test() {
echo "BaseClass::test() 호출\n";
}
// 여기서는 함수의 final 지정 여부는 관계 없습니다.
final public function moreTesting() {
echo "BaseClass::moreTesting() 호출\n";
}
}
class ChildClass extends BaseClass {
}
// 결과는 Fatal error: Class ChildClass may not inherit from final class (BaseClass)
?>
Final 키워드
santoshjoshi2003 at yahoo dot co dot in
05-Dec-2008 12:45
05-Dec-2008 12:45
slorenzo at clug dot org dot ve
31-Oct-2007 09:13
31-Oct-2007 09:13
<?php
class parentClass {
public function someMethod() { }
}
class childClass extends parentClass {
public final function someMethod() { } //override parent function
}
$class = new childClass;
$class->someMethod(); //call the override function in chield class
?>
penartur at yandex dot ru
22-Mar-2007 11:39
22-Mar-2007 11:39
Note that you cannot ovverride final methods even if they are defined as private in parent class.
Thus, the following example:
<?php
class parentClass {
final private function someMethod() { }
}
class childClass extends parentClass {
private function someMethod() { }
}
?>
dies with error "Fatal error: Cannot override final method parentClass::someMethod() in ***.php on line 7"
Such behaviour looks slight unexpected because in child class we cannot know, which private methods exists in a parent class and vice versa.
So, remember that if you defined a private final method, you cannot place method with the same name in child class.
