Maison > développement back-end > Problème PHP > Comment implémenter une méthode virtuelle en php

Comment implémenter une méthode virtuelle en php

藏色散人
Libérer: 2023-03-06 14:48:02
original
1936 Les gens l'ont consulté

Implémentation de la méthode virtuelle php : créez d'abord un fichier exemple PHP ; puis transmettez "

Comment implémenter une méthode virtuelle en php

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(); 
?>
Copier après la connexion

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
Copier après la connexion

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( &#39;Hello&#39; ); 
$b=new AnotherChildClass(); 
$b->say( &#39;Hello&#39; );
Copier après la connexion

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!

Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal