Maison  >  Article  >  développement back-end  >  Explication détaillée de l'encapsulation des classes PHP et de l'utilisation de l'héritage

Explication détaillée de l'encapsulation des classes PHP et de l'utilisation de l'héritage

伊谢尔伦
伊谢尔伦original
2017-06-30 09:09:231338parcourir

La classe est un concept important dans Orienté objet, et l'encapsulation et l'héritage sont des caractéristiques importantes de l'orientation objet. Dans cet article, nous nous concentrerons sur les deux caractéristiques de l'encapsulation et de l'héritage, et donnerons quelques exemples pour votre référence.

Encapsuler

Encapsuler les méthodes membres et les attributs membres dans des classes, en masquant les détails d'implémentation des attributs et méthodes , Par limitant les droits d'accès des membres de la classe tels que public, protégé, privé, etc., les données sont protégées en interne et ne peuvent être exploitées que par des méthodes de membre autorisées, et les membres sont encapsulés autant que possible.

public : Une méthode ou une propriété est accessible dans n'importe quelle portée, et l'est par défaut. Si aucun modificateur d'accès n'est spécifié pour une propriété ou une méthode, elle sera publique.
protected : Cette classe et ces sous-classes sont accessibles, mais les objets externes ne peuvent pas être appelés.
private : n'est accessible que dans cette classe et ne peut pas être appelé par des sous-classes ou des objets externes. Les méthodes ou attributs marqués comme privés peuvent être redéfinis dans les classes héritées, et chaque classe ne peut voir que ses propres méthodes privées définies.

Ces trois modificateurs doivent être triés du plus grand au plus petit en termes de portée : public→protected→private La raison pour laquelle on dit qu'ils sont dans la portée est que la classe encapsule certaines propriétés et méthodes, cette encapsulation. détermine la "visibilité" des données, de sorte que nous ne pouvons pas modifier à volonté les propriétés et méthodes définies en dehors de la classe mais pouvons seulement les appeler. C'est l'avantage de l'encapsulation, et cela améliore également la sécurité.
Nous donnons un exemple de code :

 class myClass{ 
  public $public="Public";    //public属性
  protected $protected="Protected"; //protected属性
  private $private="Private";   //private 属性
  function say_Hello() {    //public属性 
  //只是举例说明,自行添加内容
  } 
 
 $obj=new myClass(); 
 echo $obj->public; 
 //echo $obj->protected; 
 //echo $obj->private;

En exécutant l'exemple ci-dessus, nous obtenons un "Public", mais lorsque vous mettez //echo $obj->private; Lorsque le commentaire est supprimé, vous obtiendrez l'erreur suivante :

Erreur fatale : Impossible d'accéder à la propriété protégée myClass::$protected dans E:apachehtdocsexamplefile.php à la ligne 13.

Vous pouvez voir que nous ne pouvons pas accéder à volonté aux définitions d'attributs d'une classe. Nous ne savons pas "à l'extérieur" quels sont les membres de cette classe, car ces membres peuvent ne pas être disponibles pour les autres classes. Bien entendu, si l'on doit accéder ou modifier des propriétés définies comme "privées", on peut également utiliser les méthodes système fournies par PHP : _get() et _set().

Héritage

Vous pouvez faire en sorte qu'une classe hérite et avoir les propriétés et méthodes membres d'une autre classe existante. La classe héritée est appelée classe parent ou classe de base. La classe est une sous-classe. La relation d'héritage est implémentée via le mot-clé extends. D'une manière générale, pour avoir un héritage, il faut avoir une « racine ». Pour cette « racine », vous imaginez peut-être que si vous donnez naissance à un fils ou à une fille dans le futur, ils obtiendront des « choses (propriétés et méthodes) ». de vous, de sorte que vos « Descendants » soient ceux qui possèdent certaines de vos caractéristiques (la source).

Générer la classe "racine" (classe parent ou classe de base)
Syntaxe : classe père{
}

Générer les "descendants" ( Sous-classe)
Syntaxe : classe fils étend père{
}

PHP étend exemple de code d'héritage de classe :

class father{ 
 protected $name; 
 function construct($name){  //构造函数 
  $this->name=$name; 
 } 
 
 function work(){ 
  echo "{$this->name}我在工作;
 } 
 function destruct(){}  //析构函数
} 
 
class son extends father{  //继承父类
 function play(){ 
  echo "{$this->name}我在玩游戏;
 }  
} 
 
 $my_father=new father(“爸爸”);  //创建父类对象
 $my_father->work(); 

 $my_son=new son(“儿子”); 
 $my_son->work(); 
 $my_son->play();

Analyse : Dans la classe parent père, Nous définir les propriétés et méthodes générales, puis définir les sous-classes. Vous constaterez peut-être qu'il n'y a ni constructeurs ni destructeurs dans la sous-classe, car la sous-classe hérite de toutes les méthodes de la classe parent, vous pouvez donc appeler $my_son->work(); C'est la Classe PHP Inherited. Notez également : PHP ne peut pas avoir d'héritage à plusieurs niveaux, tel que : la classe A étend B étend C. Un tel héritage n'est pas valide en PHP. Il n'y a qu'un seul héritage en PHP, pas d'héritage multiple. D'autres méthodes sont nécessaires pour "implémenter" l'héritage multiple. déguisé.

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