Heim >Backend-Entwicklung >PHP-Tutorial >So implementieren Sie virtuelle Funktionen in PHP

So implementieren Sie virtuelle Funktionen in PHP

怪我咯
怪我咯Original
2017-07-14 10:50:424206Durchsuche

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( &#39;Hello&#39; ); 
$b=new AnotherChildClass(); 
$b->say( &#39;Hello&#39; );

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn