Compréhension préliminaire de PHP - encapsulation, héritage, fonctionnalités polymorphes

零下一度
Libérer: 2023-03-10 17:24:02
original
1611 Les gens l'ont consulté

Dans le dernier article de base, K vous a présenté l'utilisation des tableaux et des chaînes en PHP. Cette fois, K a décidé de lui donner une version unique et de partager avec vous les méthodes orientées objet en PHP. Trois fonctionnalités majeures : connaissance sous trois aspects : encapsulation, héritage et polymorphisme.

1. Encapsulation

En PHP, l'encapsulation peut se résumer en trois subdivisions : Privatisation. Plus précisément, le contrôle d'accès est obtenu en privatisant les propriétés et les méthodes de la classe qui ne nécessitent pas d'accès externe via des modificateurs d'accès.

Alors quelle est la fonction de l'encapsulation ? Il existe deux fonctions principales d'encapsulation. L'une est l' encapsulation de méthode , qui expose les fonctions qui intéressent les utilisateurs et masque les fonctions que les autres utilisateurs ne peuvent pas utiliser ; Contrôlez les données utilisateur pour empêcher les paramètres de transmission de données illégaux.

Alors comment est mise en œuvre l’opération d’encapsulation ?

Pour l'encapsulation de méthode, nous la définissons en ajoutant le

mot-clé privé avant la méthode, c'est-à-dire la privatisation. La démo est la suivante :

private function formatName(){} // 这个方法仅仅能在类内部使用$this调用 function showName(){             $this -> formatName();
         }
Copier après la connexion
 
Pour l'encapsulation d'attribut, nous pouvons avoir deux méthodes pour l'implémenter.

Tout d'abord,

définit/lit les propriétés privatisées via les méthodes set/get fournies par lui-même. La démo est la suivante :

private $age;         function setAge($age){             $this -> age = $age;
         }         function getAge(){             return $this -> age;
         }
Copier après la connexion
 
La seconde est

implémentée par la méthode magique. La démo est la suivante :

private $age;function __get($key){return $this -> $key;
}function __set($key,$value){$this -> $key = $value;
}$对象 -> age;  >>> 访问对象私有属性时,自动调用__get()魔术方法,并且将访问的属性名传给__get()方法;$对象 -> age = "11";  >>> 设置对象的私有属性时,自动调用__set()魔术方法,并且将设置的属性名以及属性值传给__set()方法;
Copier après la connexion
De plus, les méthodes magiques liées à l'encapsulation incluent principalement les suivantes :

  ① __set() : Appelé automatiquement lors de l'attribution de valeurs aux attributs privés de classe. Lors de l'appel, transmettez deux paramètres à l'objet Le nom de l'attribut et la valeur de l'attribut qui doivent être définis

. ② __get() : Lors de la lecture des attributs privés de la classe Appel automatique, passe un paramètre à la méthode lors de l'appel, le nom de l'attribut qui doit être lu
③ __isset() : Appelé automatiquement lorsque l'isset( ) la fonction est utilisée en externe pour détecter les attributs privés.
  >>> Utilisez isset() en dehors de la classe pour détecter les attributs privés, qui ne sont pas détectés par défaut. C'est faux
  >>>Nous pouvons donc utiliser la fonction __isset() pour renvoyer le résultat de la détection interne lorsqu'elle est automatiquement appelée.
function __isset($key){
return isset($this->$key);
}
Lors de l'utilisation d'isset($object name->private attribut) pour une détection externe, le résultat renvoyé par __isset() ci-dessus sera automatiquement appelé !
  ④ __unset() : automatiquement appelé lorsque la fonction unset() est utilisée en externe pour supprimer des attributs privés.
fonction __unset($key){
unset($this->$key);
}
Lorsqu'un attribut est supprimé en externe à l'aide d'unset ($object name->private attribut), le nom de l'attribut est automatiquement transmis à __unset() et remis à cette méthode magique pour traitement.

2. Héritage

En PHP, l'héritage peut aussi utiliser le mot

s'étend pour résumer. Extends est utilisé sur une sous-classe pour permettre à la sous-classe d'hériter des propriétés et méthodes non privées de la classe parent. La démo est la suivante :

  但是,在使用继承时,需要注意以下几点:

  ① 子类只能继承父类的非私有属性。
  ② 子类继承父类后,相当于将父类的属性和方法copy到子类,可以直接使用$this调用。
  ③ PHP只能单继承,不支持一个类继承多个类,但是一个类可以进行多层继承。
   >>> class Person{}
   class Chengnian extends Person{}
   class Student extends Chengnian{}
  Student类就同时具有了Chengnian类和Person类的属性和方法

  下面给大家介绍一下关于方法重写(方法覆盖)的一些知识。

  方法覆盖是指子类对继承父类中重名方法的重写或覆盖,而它的实现需要满足两个条件,一是子类继承父类;二是子类重写父类已有方法。

  那么如果我想要在调用父类中的方法,应该怎么做?我们可以通过如下代码实现:

parent::方法名();
Copier après la connexion

  同理,在子类继承父类时,首先也要调用父类的构造函数来赋值,实现代码如下:

function __construct($name,$age,$school){
    parent::__construct($name,$age);$this -> school = $school;
}// 其中name、age属性继承自父类,school属于子类
Copier après la connexion

三、多态

  在PHP中,多态是最常用到的一种特性。所谓多态,是指同一个东西不同形态的展示。在PHP中,我们这样定义多态,一个类被多个子类继承,如果这个类的某个方法在多个子类中表现不同的功能,那么这种行为我们就称其为多态的实现。

  多态的实现必须要满足三个条件:一是子类继承父类,二是子类重写父类的方法,三是父类引用指向子类对象

  多态的实现K用一个小小的demo来给大家进行演示,demo如下:

    abstract class Person{abstract function say();
    }    class Chinese extends Person{ // 条件一:子类继承父类function say(){ // 条件二:子类重写父类方法echo "我说中文!<br>";
        }
    }class English extends Person{ //条件一:子类继承父类function say(){ // 条件二:子类重写父类方法echo "I speak English!<br>";            
        }
    }    
//    Person $c = new Chinese(); // 父类引用指向子类对象,PHP中此形式行不通
//    Person $e = new English();function func(Person $p){ //PHP中的类型约束只存在与函数的形参$p -> say();
    }
    func(new Chinese()); // 条件三:父类引用指向子类对象func(new English()); // 条件三:父类引用指向子类对象
Copier après la connexion

 

好了,以上就是K给大家带来的关于PHP面向对象中封装、继承、多态这三个特性的初步理解,如果对你有帮助的话,可不要忘了给K点个赞哟~

 

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