Explication détaillée des exemples d'utilisation de l'héritage des classes PHP

伊谢尔伦
Libérer: 2023-03-12 07:40:01
original
1396 Les gens l'ont consulté

En PHP, j'écris souvent une classe avec une méthode partagée, puis je laisse la sous-classe hériter de pour obtenir la fonction correspondante. Supposons qu'il existe à peu près une telle classe parent :

<?php
class Father{

    public function construct(){
        echo &#39;我是父类的构造方法!&#39;;
    }

    protected function say($str = &#39;Hello World!&#39;){
        echo &#39;说了一句话:&#39; . $str;
    }
}
?>
Copier après la connexion

Ensuite, créez une sous-classe pour en hériter :

<?php

class chirld extends Father{

    public construct(){
        echo &#39;我是子类的构造方法~&#39;;
    }
}
Copier après la connexion

À ce stade, vous instanciez la sous-classe, et la le résultat sera Ce sera 我是子类的构造方法~ !
Bien sûr, en raison de la relation 继承, les sous-classes peuvent appeler la méthode say() de la classe parent.

Si vous souhaitez implémenter le constructeur de la classe parent, mais que vous souhaitez également implémenter le constructeur de la sous-classe, vous pouvez le faire comme ceci :

<?php

class chirld extends Father{

    public construct(){
        parent::construct();
        echo &#39;我是子类的构造方法~&#39;;
    }
}

?>
Copier après la connexion

À ce stade, <🎜 sera affiché > et 我是父类的构造方法!. 我是子类的构造方法~

Supposons que vous définissiez une telle méthode dans la sous-classe :

protected function say($str = &#39;&#39;){
   echo &#39;我是子类的say&#39;;
}
Copier après la connexion
Ensuite, la méthode

dont vous avez hérité de la classe parent sera remplacée, alors appelez Le résultat final est : sys(). 我是子类的say

Que se passerait-il si vous le définissiez ainsi ?

public function say($str = &#39;&#39;){
     echo &#39;我是子类的方法哦~&#39;;
}
Copier après la connexion
Cette façon d'écrire est toujours acceptable. La différence entre PHP et les autres langages fortement typés est que la méthode de substitution PHP vous permet de "publiciser vers le haut" la méthode remplacée, mais ne vous permet pas de "privatiser vers le bas". Par exemple, ici vous définissez

être. Une erreur sera certainement signalée, mais dans un langage comme C++, c'est exactement le contraire. private

La réflexion de PHP à propos de cette situation est que votre père vous a donné un héritage de niveau protégé. À l'heure actuelle, c'est un héritage de niveau protégé entre vos mains. Votre père vous permet de le partager avec d'autres.

, mais vous n'êtes pas autorisé à le cacher vous-même, c'est-à-dire public, vous ne pouvez certainement pas tout garder pour vous. private

À ce stade, vous vous demanderez certainement, que se passera-t-il si le

de la classe parent est défini sur say() ? privateLe résultat ne sera pas le même, c'est-à-dire que la classe parent a été privatisée et la sous-classe ne peut pas du tout en hériter, vous pouvez donc personnaliser la méthode
dans la sous-classe à votre guise. say()

Il y a un autre problème, c'est-à-dire que la classe parent a déjà défini

avec des paramètres facultatifs. Alors, que se passera-t-il si vous la définissez dans la sous-classe sans paramètres comme celui-ci ? sys()

public function say(){
    echo &#39;哈哈。我没有参数了耶~&#39;;
}
Copier après la connexion
Le résultat peut toujours être exécuté normalement, mais il y aura une invite de niveau

. La raison en est que le standard PHP veut que le nombre de paramètres soit aligné sur la classe parent. Bien entendu, le niveau d'erreur peut être défini dans le php.ini. E_STRICT

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:
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!