Explication détaillée des exemples d'héritage en PHP

小云云
Libérer: 2023-03-22 20:22:01
original
1378 Les gens l'ont consulté

L'héritage ne change pas la structure de la classe. Au lieu de cela, cela indique qu'il existe une certaine relation entre les deux classes, donnant l'impression que les membres existent dans d'autres classes.

Le processus syntaxique principal est le suivant : Mais lorsque nous créons un nouvel objet, nous allons d'abord ouvrir un espace de stockage dans la zone de données, puis initialiser l'objet. Lors de l'initialisation, la variable ou la méthode est d'abord recherchée dans l'espace de classe correspondant à l'objet. Si elle est introuvable, si elle présente une relation d'héritage, elle sera ensuite recherchée dans sa classe parent. Par conséquent, ce que nous appelons l'héritage ne modifie pas la structure de la classe, mais ajoute simplement une relation d'héritage entre les deux classes d'héritage. (Par exemple, opération de réécriture : lorsqu'il y a le même nom de méthode dans la sous-classe et la classe parent, la fonction est remplacée et la méthode dans la classe correspondante de l'objet actuel est d'abord recherchée. Une fois trouvée, la recherche ne continuera pas . À ce stade, nous semblons que la méthode de la classe parent a été remplacée, c'est le concept de substitution).

<?php
header("Content-Type:text/html;charset=utf-8");
Class A {
	public $p1=1;
	const c1=3;
	static $d1=5;
	private $e1=7;
	function f1(){
		echo "我是A中的方法!";
	}
}
Class B extends A{
	public $p2=2;
	const c2=4;
	static $d1=6;
	private $e2=8;
	function f1(){
		echo "我是B中的方法!".$this->e1;
		echo "我是B中的方法!".$this->e2;
	}
}
$o1=new B();
var_dump($o1);
echo "<br/>";
$o1->f1();
echo "<br/>";
A::f1();//此处不建议这么写,这是不严格的语法。
echo "<br/>";
?>
Copier après la connexion

Remarque : Il y a la valeur de la variable e1 dans var_dump ($o1), et elle est marquée " [" e1": "A":private]=> int(7)", qui montre que les propriétés privées peuvent également être héritées. Lors de l'appel de la variable e1 dans la classe B, des variables non définies seront affichées. Cela montre que bien que les variables statiques puissent être héritées, seule la classe dans laquelle elles se trouvent peut les appeler (les sous-classes peuvent hériter, mais ne peuvent pas appeler).

<?php
	header("Content-Type:text/html;charset=utf-8");
	Class A {
		public $p1=1;
		const c1=3;
		static $d1=5;
		private $e1=7;
		function f1(){
			echo "我是A中的方法!".self::$d1;
		}
	}
	Class B extends A{
		public $p2=2;
		const c2=4;
		static $d2=6;
		private $e2=8;
		function f1(){
			echo "我是B中的方法!".self::$d1;
			//echo "我是B中的方法!".self::$d2;
		}
	}
	echo "<br/>";
	echo "类B中的静态属性d2:".B::$d2;
	echo "<br/>";
	echo "类B中能否继承父类A中的静态属性d1:".B::$d1;
	echo "<br/>";
	echo "类A中的静态属性d1:".A::$d1;
	echo "<br/>";
	echo "类A中能否访问子类B中的静态属性d2:".A::$d2;
Copier après la connexion

De là, nous pouvons voir que la sous-classe peut accéder aux propriétés statiques de la classe parent, mais que la classe parent ne peut pas obtenir les propriétés statiques de la classe parent. propriété de sous-classe. Étant donné que le système effectue un processus de recherche « ascendant » lors de l'exécution, il recherche d'abord dans la classe actuelle. S'il ne peut pas être trouvé, il recherche vers le haut dans la couche (classe parent). La classe parent ne peut pas rechercher au niveau suivant (sous-classe).

Remarque : les propriétés statiques n'existent pas dans l'espace de données de l'objet comme les propriétés ordinaires.

Enfin, à partir de deux exemples : l'héritage ne change aucune structure de la classe. C'est juste quelque chose à propos de la classe parent dans l'objet. Et les fonctions peuvent être appelées depuis la classe parent. (En termes simples, lorsqu'un objet est créé, certaines données pouvant être stockées seront stockées dans la zone de stockage de données créée par l'objet actuel. Certaines opérations ultérieures via l'objet sont effectuées dans cette zone de stockage de données, qui est la même que celle nous avons écrit plus tôt. Il n'y a pas de relation directe avec la classe. Une fois la classe écrite, elle ne sera pas modifiée en externe).

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!