Maison > Article > développement back-end > Explication détaillée des exemples d'utilisation de l'héritage des classes PHP
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 '我是父类的构造方法!'; } protected function say($str = 'Hello World!'){ echo '说了一句话:' . $str; } } ?>
Ensuite, créez une sous-classe pour en hériter :
<?php class chirld extends Father{ public construct(){ echo '我是子类的构造方法~'; } }
À 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 '我是子类的构造方法~'; } } ?>
À ce stade, et 我是父类的构造方法!
. 我是子类的构造方法~
protected function say($str = ''){ echo '我是子类的say'; }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
public function say($str = ''){ echo '我是子类的方法哦~'; }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
, 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
de la classe parent est défini sur say()
? private
Le 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()
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 '哈哈。我没有参数了耶~'; }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!