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
Palavra-Chave 'final'
PHP 5 introduz a palavra-chave 'final', que previne que classes filhas sobrecarreguem um método ou variável. Basta prefixar a definição com 'final'.
Exemplo #1 Exemplo de métodos 'final'
<?php
class ClasseBase {
public function teste() {
echo "ClasseBase::teste() chamado\n";
}
final public function maisTeste() {
echo "ClasseBase::maisTeste() chamado\n";
}
}
class ClasseFilha extends ClasseBase {
public function maisTeste() {
echo "ClasseFilha::maisTeste() called\n";
}
}
// Resulta em erro Fatal: Não pode sobrescrever método final ClasseBase::maisTeste()
?>
Exemplo #2 Exemplo de classe Final
<?php
final class ClasseBase {
public function teste() {
echo "Método ClasseBase::teste() chamado\n";
}
// Aqui não importa se você especificar a função como Final ou não
final public function maisTeste() {
echo "Método ClasseBase::maisTeste() chamado\n";
}
}
class ClasseFilha extends ClasseBase {
}
// Resulta em erro Fatal: A classe ClasseFilha não pode herdar de uma classe Final (ClasseBase)
?>
User Contributed Notes
Palavra-Chave 'final'
Palavra-Chave 'final'
santoshjoshi2003 at yahoo dot co dot in
05-Dec-2008 08:45
05-Dec-2008 08:45
slorenzo at clug dot org dot ve
31-Oct-2007 05:13
31-Oct-2007 05: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 06:39
22-Mar-2007 06: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.

Métodos Mágicos