PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

Objekte klonen> <Magische Methoden
Last updated: Fri, 03 Oct 2008

view this page in

Final Schlüsselwort

PHP 5 führt das final Schlüsselwort ein, welches Kindklassen davon abhält Methoden zu überladen, indem man der Definition final voranstellt. Wenn die Klasse selbst als final definiert wird, kann sie nicht erweitert werden.

Beispiel #1 Beispiele für final Methoden

<?php
class BaseClass {
   public function 
test() {
       echo 
"BaseClass::test() aufgerufen\n";
   }
   
   final public function 
moreTesting() {
       echo 
"BaseClass::moreTesting() aufgerufen\n";
   }
}

class 
ChildClass extends BaseClass {
   public function 
moreTesting() {
       echo 
"ChildClass::moreTesting() aufgerufen\n";
   }
}
// Erzeugt einen fatalen Fehler: Cannot override final method BaseClass::moreTesting()
?>

Beispiel #2 Beispiel für final Klassen

<?php
final class BaseClass {
   public function 
test() {
       echo 
"BaseClass::test() aufgerufen\n";
   }

   
// Es macht hier keinen Unterschied, ob die Methode final ist oder nicht
   
final public function moreTesting() {
       echo 
"BaseClass::moreTesting() aufgerufen\n";
   }
}

class 
ChildClass extends BaseClass {
}
// Erzeugt einen fatalen Fehler: Class ChildClass may not inherit from final class (BaseClass)
?>


add a note add a note User Contributed Notes
Final Schlüsselwort
slorenzo at clug dot org dot ve
31-Oct-2007 08: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 10: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.

Objekte klonen> <Magische Methoden
Last updated: Fri, 03 Oct 2008
 
 
show source | credits | sitemap | contact | advertising | mirror sites