Maison développement back-end tutoriel php PHP5中虚函数的实现方法分享_php技巧

PHP5中虚函数的实现方法分享_php技巧

May 17, 2016 am 09:20 AM
php5 fonction virtuelle

请看下面的代码:

复制代码 代码如下:

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();
?>

该例中,A::y()调用了A::x(),而B::x()覆盖了A::x(),那么当调用B::y()时,B::y()应该调用A::x()还是 B::x()呢?在C++中,如果A::x()未被定义为虚函数,那么B::y()(也就是A::y())将调用A::x(),而如果A::x()使用 virtual关键字定义成虚函数,那么B::y()将调用B::x()。然而,在PHP5中,虚函数的功能是由 self 和 $this 关键字实现的。如果父类中A::y()中使用 self::x() 的方式调用了 A::x(),那么在子类中不论A::x()是否被覆盖,A::y()调用的都是A::x();而如果父类中A::y()使用 $this->x() 的方式调用了 A::x(),那么如果在子类中A::x()被B::x()覆盖,A::y()将会调用B::x()。

上例的运行结果如下:
A::x() was called. A::y() was called. --
B::x() was called. A::z() was called.
virtual-function.php
复制代码 代码如下:

class ParentClass {
static public function say( $str ) {
static::do_print( $str );
}
static public function do_print( $str ) {
echo "

Parent says $str

";
}
}
class ChildClass extends ParentClass {
static public function do_print( $str ) {
echo "

Child says $str

";
}
}
class AnotherChildClass extends ParentClass {
static public function do_print( $str ) {
echo "

AnotherChild says $str

";
}
}
echo phpversion();
$a=new ChildClass();
$a->say( 'Hello' );
$b=new AnotherChildClass();
$b->say( 'Hello' );
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelle est la différence entre php5 et php8 Quelle est la différence entre php5 et php8 Sep 25, 2023 pm 01:34 PM

Les différences entre php5 et php8 concernent les performances, la structure du langage, le système de types, la gestion des erreurs, la programmation asynchrone, les fonctions de bibliothèque standard et la sécurité. Introduction détaillée : 1. Amélioration des performances. Par rapport à PHP5, PHP8 présente une énorme amélioration des performances. PHP8 introduit un compilateur JIT, qui peut compiler et optimiser certains codes d'exécution à haute fréquence, améliorant ainsi la vitesse d'exécution. PHP8 introduit de nouvelles structures et fonctions de langage. PHP8 prend en charge les paramètres nommés, permettant aux développeurs de transmettre les noms des paramètres au lieu de l'ordre des paramètres, etc.

Comment changer le port 80 en php5 Comment changer le port 80 en php5 Jul 24, 2023 pm 04:57 PM

Comment changer le port 80 dans php5 : 1. Modifiez le numéro de port dans le fichier de configuration du serveur Apache ; 2. Modifiez le fichier de configuration PHP pour vous assurer que PHP fonctionne sur le nouveau port ; 3. Redémarrez le serveur Apache et l'application PHP le fera. commencez à exécuter sur le nouveau port.

Comment la surcharge de fonctions C++ et les fonctions virtuelles fonctionnent-elles ensemble ? Comment la surcharge de fonctions C++ et les fonctions virtuelles fonctionnent-elles ensemble ? Apr 26, 2024 am 10:09 AM

La surcharge de fonctions en C++ permet de définir différentes implémentations pour des fonctions du même nom avec des paramètres différents, tandis que les fonctions virtuelles permettent de remplacer les fonctions de la classe de base dans les classes dérivées pour obtenir un polymorphisme. La surcharge de fonctions et les fonctions virtuelles peuvent fonctionner ensemble. En concevant une fonction virtuelle surchargée dans la classe de base, la classe dérivée ne peut surcharger que la version d'une combinaison de paramètres spécifique, offrant ainsi un polymorphisme plus flexible, comme le calcul de différents types dans des cas pratiques. de la forme depuis son origine.

Explication détaillée du débogage des fonctions C++ : Comment déboguer les problèmes dans les fonctions virtuelles ? Explication détaillée du débogage des fonctions C++ : Comment déboguer les problèmes dans les fonctions virtuelles ? May 02, 2024 pm 03:42 PM

Méthodes de débogage des fonctions virtuelles : définissez les points d'arrêt à parcourir ; utilisez assert() pour vérifier les conditions ; utilisez les outils de débogage pour vérifier les types dynamiques, les piles de fonctions et redéfinir les fonctions virtuelles.

Comment résoudre le problème que PHP5 n'écoute pas sur le port 9000 Comment résoudre le problème que PHP5 n'écoute pas sur le port 9000 Jul 10, 2023 pm 04:01 PM

Étapes de solution pour que PHP5 n'écoute pas le port 9000 : 1. Vérifiez le fichier de configuration PHP-FPM ; 2. Redémarrez le service PHP-FPM ; 3. Désactivez le pare-feu ou configurez la redirection de port ; 4. Vérifiez si d'autres processus occupent le port 9000.

Quelle est la différence entre la syntaxe php7 et php5 Quelle est la différence entre la syntaxe php7 et php5 Jul 10, 2023 pm 03:25 PM

Les différences de syntaxe entre php7 et php5 sont : 1. PHP7 introduit des déclarations de type strictes, tandis que le type des variables PHP5 est implicite ; 2. PHP7 introduit le support des déclarations de type scalaire, mais pas PHP5 3. PHP7 introduit l'opérateur de fusion NULL, tandis que PHP5 vérifie si une variable existe et n'est pas nulle, vous devez utiliser une instruction conditionnelle ; 4. PHP7 ajoute un nouvel opérateur de comparaison "<=>", mais pas PHP5 ; 5. PHP7 introduit une nouvelle fonctionnalité de classe anonyme, tandis que PHP5 ce n'est pas le cas.

Interaction entre les fonctions amies C++ et les fonctions virtuelles Interaction entre les fonctions amies C++ et les fonctions virtuelles Apr 16, 2024 pm 03:45 PM

En C++, les fonctions amies interagissent avec les fonctions virtuelles afin que la fonction amie puisse accéder à la fonction virtuelle et appeler la fonction amie dans la classe dérivée pour accéder aux membres privés de la classe de base. Cette interaction peut être utilisée pour accéder à des données cachées dans la hiérarchie d'héritage ou pour implémenter un comportement polymorphe.

Comment déclarer et appeler des fonctions virtuelles en C++ ? Comment déclarer et appeler des fonctions virtuelles en C++ ? Apr 12, 2024 pm 04:03 PM

Une fonction virtuelle est un mécanisme de polymorphisme qui permet à une classe dérivée de remplacer les fonctions membres de sa classe de base : Déclaration : Ajoutez le mot-clé virtual avant le nom de la fonction. Appel : à l’aide d’un pointeur ou d’une référence de classe de base, le compilateur se liera dynamiquement à l’implémentation appropriée de la classe dérivée. Cas pratique : En définissant la classe de base Shape et ses classes dérivées Rectangle et Circle, il démontre l'application de fonctions virtuelles en polymorphisme, calcul d'aire et dessin de formes.

See all articles