VirtuelleFunktionUm die Anforderungen von Überladung und Polymorphismus zu erfüllen, ist sie in der Basisklasse definiert. Auch wenn die Definition leer ist, kann sie überschrieben werden oder nicht die Unterklasse. Schreiben Sie Funktionen in Basisklassen!
Rein virtuelle Funktionen sind nicht in der Basisklasse definiert und müssen in der Unterklasse implementiert werden, ähnlich wie die Schnittstellenfunktion in Java!
Virtuelle Funktion
Grund für die Einführung: Um die Verwendung polymorpher Merkmale zu erleichtern, müssen wir häufig virtuelle Funktionen in Basisklassen definieren.
Wie implementiert man diese virtuelle Funktion in PHP5? Bitte schauen Sie sich den folgenden Code an:
<?php class A { public function x() { echo "A::x() was called.\n"; } public function y() { self::x(); echo "A::y() was called.\n"; } public function z() { $this->x(); echo "A::z() was called.\n"; } } class B extends A { public function x() { echo "B::x() was called.\n"; } } $b = new B(); $b->y(); echo "--\n"; $b->z(); ?>
In diesem Beispiel ruft A::y() A::x() auf und B::x() überschreibt A: :x(), sollte B::y() dann beim Aufruf von B::y() A::x() oder B::x() aufrufen? Wenn in C++ A::x() nicht als virtuelle Funktion definiert ist, dann ruft B::y() (d. h. A::y()) A::x() auf, und wenn A:: x() wird mit dem Schlüsselwort virtual als virtuelle Funktion definiert, dann ruft B::y() B::x() auf. In PHP5 wird die Funktionalität virtueller Funktionen jedoch durch die Schlüsselwörter self und $this implementiert. Wenn A::y() in der übergeordneten Klasse A::x() mit self::x() aufruft, dann gilt in der Unterklasse, unabhängig davon, ob A::x() überschrieben wird oder nicht, A::y( ) ruft A::x(); auf und wenn A::y() in der übergeordneten Klasse A::x() mit $this->x() aufruft, dann wenn A::y() in der Unterklasse :: x() wird von B::x() überschrieben, A::y() ruft B::x() auf.
Die laufenden Ergebnisse des obigen Beispiels lauten wie folgt:
A::x() was called. A::y() was called. -- B::x() was called. A::z() was called.
virtual-function.php
<?php class ParentClass { static public function say( $str ) { static::do_print( $str ); } static public function do_print( $str ) { echo "<p>Parent says $str</p>"; } } class ChildClass extends ParentClass { static public function do_print( $str ) { echo "<p>Child says $str</p>"; } } class AnotherChildClass extends ParentClass { static public function do_print( $str ) { echo "<p>AnotherChild says $str</p>"; } } echo phpversion(); $a=new ChildClass(); $a->say( 'Hello' ); $b=new AnotherChildClass(); $b->say( 'Hello' );
Das obige ist der detaillierte Inhalt vonSo implementieren Sie virtuelle Funktionen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!