Maison >développement back-end >tutoriel php >En PHP, les sous-classes surchargent les méthodes de la classe parent (parent :: nom de la méthode)
Cet article présente principalement le contenu pertinent des sous-classes surchargeant les méthodes de classe parent (parent::nom de la méthode) en PHP. Toutes sont partagées avec tout le monde pour votre référence
La surcharge ne peut pas être définie dans les fonctions PHP avec le même. name inclut également les 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éthode. 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 » de la classe Person ne peut prononcer que ses propres attributs de membre, 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(); //调用学生类中覆盖父类的说话方法 ?>
Le résultat de sortie après l'exécution du programme est :
Je m'appelle : Zhang San, sexe : masculin, mon âge est : 20 ans, j'étudie à l'école edu
en PHP, 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 celui de l'exemple précédent , mais dans ce cas, il est beaucoup plus simple d'appeler directement la méthode remplacée dans la classe parent de la sous-classe. 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.
Recommandations associées :
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!