Implémentation de la méthode virtuelle php : créez d'abord un fichier exemple PHP ; puis transmettez "
Recommandé : "Tutoriel vidéo PHP"
Partage de la méthode d'implémentation des fonctions virtuelles en PHP5
Quiconque a étudié le C++ doit savoir qu'il existe un concept de fonction virtuelle en C++. Comment implémenter cette fonction virtuelle en php5 ?
Veuillez regarder le code ci-dessous :
Le code est le suivant :
<?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(); ?>
Dans cet exemple, A::y() appelle A::x (), et B::x() couvre A::x(), donc lors de l'appel de B::y(), B::y() devrait-il appeler A::x() ou B::x() ? En C++, si A::x() n'est pas défini comme une fonction virtuelle, alors B::y() (c'est-à-dire A::y()) appellera A::x(), et si A:: x () est défini comme une fonction virtuelle à l'aide du mot-clé virtual, alors B::y() appellera B::x().
Cependant, en PHP5, la fonctionnalité des fonctions virtuelles est implémentée par les mots-clés self et $this. Si A::y() dans la classe parent appelle A::x() en utilisant self::x(), alors dans la sous-classe, peu importe si A::x() est remplacé ou non, A::y() appelle A::x(); et si A::y() dans la classe parent appelle A::x() en utilisant $this->x(), alors si A::y() dans la sous-classe :: x() est remplacé par B::x(), A::y() appellera B::x().
Le résultat de l'exemple ci-dessus est le suivant :
A::x() was called. A::y() was called. -- B::x() was called. A::z() was called. virtual-function.php
Le code est le suivant :
<?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' );
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!