Maison >développement back-end >Problème PHP >Que signifie la réécriture de méthode php ?

Que signifie la réécriture de méthode php ?

藏色散人
藏色散人original
2020-11-24 09:37:412639parcourir

La réécriture de méthode PHP fait référence au remplacement des méthodes héritées de la classe parent, c'est-à-dire au remplacement de la méthode de la classe parent. La méthode est la suivante : définissez d'abord un paramètre de constructeur, puis définissez une sous-classe à utiliser " extends " ; mot-clé à hériter ; remplace enfin la méthode de la classe parent.

Que signifie la réécriture de méthode php ?

Recommandé : "Tutoriel vidéo PHP"

  • Cette méthode convient à toutes les marques Ordinateur

Exemple d'opération de remplacement de méthode de programmation orientée objet (POO) PHP

Les exemples de cet article décrivent l'opération de remplacement de méthode PHP en programmation orientée objet (POO). Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Parce que PHP est un langage faiblement typé, il peut recevoir différents types de données dans les paramètres de la méthode elle-même, et parce que la méthode PHP peut recevoir un nombre indéfini de paramètres, il n'est donc pas valide d'appeler différentes méthodes avec des noms de méthode différents en passant un nombre différent de paramètres, donc PHP ne peut pas être surchargé.

Bien que les méthodes portant le même nom ne puissent pas être définies en PHP, dans les deux classes ayant une relation parent-enfant, nous pouvons définir des méthodes portant le même nom que la classe parent dans la sous-classe, héritant ainsi des méthodes de la classe parent. La méthode est écrasée (en remplaçant la méthode de la classe parent).

<?php
class Person
{
//下面是人的成员属性
var $name; //人的名子
var $sex; //人的性别
var $age; //人的年龄
//定义一个构造方法参数为属性姓名$name、性别$sex和年龄$age进行赋值
function __construct($name, $sex, $age) {
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
}
//这个人可以说话的方法, 说出自己的属性
function say() {
echo "my name is:" . $this->name . " sex:" . $this->sex . " my age is:" . $this->age;
}
}
//定义一个子类“学生类“使用”extends”关键字来继承”人”类:
class Student extends Person
{
var $school; //学生所在学校的属性
function __construct($name,$sex,$age,$school)
{
parent::__construct($name,$sex,$age);
$this->school = $school;
}
// 重写父类的say()方法
function say()
{
echo "my name is:" . $this->name ." my school is:" . $this->school;
}
//这个学生学习的方法
function study()
{
echo "my name is:" . $this->name . " my school is:" . $this->school;
}
}
?>

De plus, lorsqu'une sous-classe substitue une méthode d'une classe parent, vous devez également y prêter attention. Les droits d'accès des méthodes de la sous-classe ne doivent pas être inférieurs aux droits d'accès de la méthode substituée. de la classe parent, c'est-à-dire qu'elle doit être supérieure ou égale aux autorisations d'accès pour les méthodes de la classe parent.

Par exemple, si l'autorisation d'accès de la méthode de la classe parent est protégée, alors les autorisations à remplacer dans la sous-classe doivent être protégées et publiques. Si la méthode de la classe parent est publique, alors la méthode à remplacer. dans la sous-classe ne peut être que publique, en bref, les méthodes des sous-classes ont toujours des droits d'accès supérieurs ou égaux aux méthodes remplacées de la classe parent.

Dans l'exemple ci-dessus, nous avons écrasé la méthode "say()" héritée de la classe parent dans la sous-classe "Student". En écrasant, nous avons obtenu l'extension de la "méthode". Cependant, bien que cela résolve le problème mentionné ci-dessus, dans le développement réel, une méthode ne peut pas être constituée d'un seul code ou de plusieurs codes. Par exemple, la méthode "say()" dans la classe "Person" comporte 100 lignes de code If. nous voulons écraser cette méthode et conserver les fonctions d'origine plus un peu plus de fonctionnalités, nous devons réécrire les 100 lignes de code d'origine, plus quelques lignes de code développées. Dans certains cas, les méthodes du fichier sont plutôt bonnes. la classe parent ne peut pas voir le code original. Comment réécrire le code original à ce moment-là ? Nous avons également une solution, c'est-à-dire que dans la méthode de sous-classe, vous pouvez appeler la méthode surchargée dans la classe parent. Autrement dit, vous pouvez prendre les fonctions originales de la méthode surchargée et ajouter certaines de vos propres fonctions. . Pour implémenter l'appel de la méthode surchargée de la classe parent dans la méthode de la sous-classe :

La première consiste à utiliser le "nom de classe ::" de la classe parent pour appeler la méthode surchargée de la classe parent

La première consiste à utiliser la méthode "parent::" pour appeler la méthode surchargée dans la classe parent ;

//定义一个子类“学生类“使用”extends”关键字来继承”人”类:
class Student extends Person
{
var $school; //学生所在学校的属性
function __construct($name,$sex,$age,$school)
{
parent::__construct($name,$sex,$age);
$this->school = $school;
}
// 重写父类的say()方法
function say()
{
//使用父类的"类名::"来调用父类中被覆盖的方法;
// Person::say();
//或者使用"parent::"的方试来调用父类中被覆盖的方法;
parent::say();
echo "my name is:" . $this->name ." my school is:" . $this->school;
}
//这个学生学习的方法
function study()
{
echo "my name is:" . $this->name . " my school is:" . $this->school;
}
}

Vous pouvez désormais accéder à la méthode surchargée dans la classe parent de deux manières, laquelle nous choisissons ? Quelle est la meilleure façon ? Les utilisateurs peuvent constater que le code qu'ils écrivent accède aux variables et aux fonctions de la classe parent. Cela est particulièrement vrai si la sous-classe est très raffinée ou si la classe parent est très spécialisée. N'utilisez pas le nom littéral de la classe parent dans le code, utilisez plutôt le nom spécial parent, qui fait référence au nom de la classe parent pointée par la sous-classe dans la déclaration extends. Cela évite d'utiliser le nom de la classe parent à plusieurs endroits. Si l'arbre d'héritage doit être modifié lors de l'implémentation, modifiez simplement la déclaration extends dans la classe.

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!

Déclaration:
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