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/>"; ?>
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;
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!