Maison  >  Article  >  développement back-end  >  Comment utiliser parent :: en php ?

Comment utiliser parent :: en php ?

伊谢尔伦
伊谢尔伦original
2017-07-08 09:57:429095parcourir

Vous ne pouvez pas définir de fonctions portant le même nom en PHP, y compris des méthodes portant le même nom qui ne peuvent pas être définies dans la même classe, il n'y a donc pas de surcharge de méthodes . Une méthode portant le même nom que la classe parent peut être définie dans une sous-classe uniquement, car les méthodes de la classe parent existent déjà dans la sous-classe, donc les méthodes héritées de la classe parent peuvent être remplacées dans la sous-classe.

La méthode pour remplacer la classe parent dans une sous-classe consiste à écraser les méthodes héritées de la classe parent dans la sous-classe. Les méthodes de la classe parent ne peuvent-elles pas être utilisées directement si elles sont héritées par. la sous-classe ? Pourquoi devons-nous le surcharger ? Parce qu'il y a certaines situations que nous devons couvrir. Par exemple, il existe une classe "Bird", dans laquelle est définie la méthode générale "Fly" pour les oiseaux. Prendre la classe "autruche" comme sous-classe héritera de la méthode "voler", mais dès que la méthode "voler" dans la classe "autruche" sera appelée, l'autruche s'envolera. Bien que les autruches ne puissent pas voler, d'autres caractéristiques ont les caractéristiques des « oiseaux ». Par conséquent, lors de la déclaration de la classe « autruche », vous pouvez toujours hériter de la classe « oiseau », mais vous devez ajouter la classe « oiseau » à la classe « autruche ». . Pour réécrire la méthode "volante" héritée de la classe, vous devez surcharger la méthode de la classe parent dans la sous-classe.

Dans l'exemple suivant, la classe Person déclarée a une méthode "speak". La classe Student peut directement utiliser la méthode "speak" après avoir hérité de la classe Person. Cependant, la méthode "speak" dans la classe Person ne peut parler que de ses propres membres attributs , tandis que la classe Student étend la classe Person et ajoute plusieurs nouveaux attributs de membre. Le code est le suivant :

<?php
class Person{
protected $name;
protected $sex;
protected $Wage;
function construct($name="",$sex="男",$age=1){
$this ->name = $name;
$this ->sex = $sex;
$this ->age = $age;
}
//在人类中声明一个通用的说话方法,介绍一下自己
function say(){
echo "我的名字:".$this-> name.",性别:".$this ->sex.",年龄:".$this ->age."。<br>";
}
}
//声明一个学生类,使用extends关键字扩展(继承)person类
class Student extends Person {
private $school; //在学生类中声明一个所在学校school的成员属性
//覆盖父类中的构造方法,在参数列表中添加一个学校属性,用来创建对象并初始化成员属性
function construct($name="",$sex="男",$age=1,$school=""){
$this ->name = $name;
$this ->sex = $sex;
$this ->age = $age;
$this ->school = $school;
}
function study(){
echo $this ->name."正在".$this ->school."学习<br>";
}
//定义一个和父类中同名的方法,将父类中的说话方法覆盖并重写,多说出所在的学校名称
function say(){
echo "我的名字:".$this ->name.",性别:".$this ->sex.",年龄:".$this ->age.",在".$this ->school."学校上学<br>";
}
}
$student= new Student("张三","男",20,"edu"); //创建一个学生对象,并传给一个学校名称参数
$student -> say(); //调用学生类中覆盖父类的说话方法
?>

Après avoir exécuté le programme modifié, le résultat de sortie est :

Je m'appelle : Zhang San, sexe : masculin, mon âge Oui : 20 ans, étudiant à l'école edu

En PHP, il fournit la fonction d'appeler la méthode surchargée de la classe parent dans la méthode surchargée de la sous-classe . De cette façon, dans les méthodes remplacées par la sous-classe, vous pouvez continuer à utiliser les méthodes héritées et remplacées de la classe parent, puis ajouter de nouvelles fonctions si nécessaire. Le format de l'appel consiste à utiliser "parent : nom de la méthode" pour appeler la méthode surchargée de la classe parent dans la méthode surchargée de la sous-classe. Modifiez le code dans l'exemple ci-dessus, utilisez "parent::construct()" dans le constructeur remplacé de la sous-classe pour appeler le constructeur remplacé de la classe parent et ajoutez un attribut de membre supplémentaire pour le membre nouvellement étendu de la sous-classe. code. Utilisez "parent::say()" dans la méthode say() substituée dans la sous-classe pour appeler la méthode say() substituée dans la classe parent, puis ajoutez la fonction de sortie des attributs membres de la sous-classe.

Le code est le suivant :

<?php
class Person{
protected $name;
protected $sex;
protected $Wage;
function construct($name="",$sex="男",$age=1){
$this ->name = $name;
$this ->sex = $sex;
$this ->age = $age;
}
//在人类中声明一个通用的说话方法,介绍一下自己
function say(){
echo "我的名字:".$this-> name.",性别:".$this ->sex.",年龄:".$this ->age."。<br>";
}
}
//声明一个学生类,使用extends关键字扩展(继承)person类
class Student extends Person {
private $school; //在学生类中声明一个所在学校school的成员属性
//覆盖父类中的构造方法,在参数列表中添加一个学校属性,用来创建对象并初始化成员属性
function construct($name="",$sex="男",$age=1,$school=""){
//调用父类中被覆盖的构造方法,为从父类中集成过来额出行赋初值
parent::construct($name,$sex,$age);
$this ->school = $school;
}
function study(){
echo $this ->name."正在".$this ->school."学习<br>";
}
//定义一个和父类中同名的方法,将父类中的说话方法覆盖并重写,多说出所在的学校名称
function say(){
parent::say(); //调用父类中被本方法覆盖掉的方法
echo "在".$this ->school."学校上学<br>";
}
}
$student= new Student("张三","男",20,"edu"); //创建一个学生对象,并传给一个学校名称参数
$student -> say(); //调用学生类中覆盖父类的说话方法
?>

Le résultat de sortie de l'exemple ci-dessus est le même que l'exemple précédent, mais dans ce cas, en appelant directement la classe parent dans la sous-classe La méthode de recouvrement est beaucoup plus simple. De plus, lorsqu'une sous-classe substitue une méthode d'une classe parent, il faut noter que les autorisations d'accès des méthodes substituées dans la sous-classe ne doivent pas être inférieures aux autorisations d'accès des méthodes substituées de la classe parent. Par exemple, si l'autorisation d'accès dans la classe parent est protégée, l'autorisation de la méthode remplacée dans la classe enfant doit être protégée ou publique.

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