Maison > base de données > tutoriel mysql > le corps du texte

Explication détaillée de l'utilisation des implémentations en php

怪我咯
Libérer: 2017-07-11 16:03:21
original
1761 Les gens l'ont consulté

Les classes HP sont à héritage unique, c'est-à-dire qu'elles ne prennent pas en charge l'héritage multiple. Lorsqu'une classe nécessite les fonctions de plusieurs classes, l'héritage est impuissant. Pour cette raison, PHP introduit la technologie d'interface de classe.

Si toutes les méthodes d'une classe abstraite sont des méthodes abstraites, qu'aucune variable n'est déclarée et que tous les membres de l'interface ont des autorisations publiques, alors cette classe abstraite spéciale appelée interface.

L'interface est définie à l'aide du mot-clé interface, et le mot-clé Implements est utilisé pour implémenter les méthodes dans l'interface, qui doivent être entièrement implémentées.

Application de l'interface en classe

1. Mot clé : interface

2. >

1. Introduction et création d'interfaces

Interface : une classe abstraite spéciale dont les attributs membres sont tous abstraits ou constants.

Règles : 1. Toutes les méthodes de la classe sont abstraites.

2. Il n'est pas nécessaire d'ajouter du résumé pour les méthodes abstraites.

3. L'attribut de la méthode abstraite de l'interface est public.

4. Les attributs des membres doivent être des constantes.

Le code de format est le suivant :

interface demo { 
const NAME = "常量对象属性"; 
function myfun1(); //抽象方法
function myfun2(); //抽象方法,不用具体写入逻辑 
}
Copier après la connexion
1. Définition et appel des interfaces

Remarque : Il y a une chose. à noter à propos de l'exemple ci-dessus. Le nom de la méthode de l'interface est show. La classe qui hérite de l'interface doit avoir la méthode show, sinon une erreur sera signalée. En d'autres termes, les méthodes de l'interface sont fausses, et ce qui fonctionne vraiment, ce sont les méthodes de la classe héritée. L'interface ici est-elle un peu similaire à la classe abstraite de PHP ?
<?php
interface Cinema
{
  const film = &#39;加勒比海盗&#39;;
  public function show();
}
class Order implements Cinema
{
  public function show()
  {
    echo "影院 接口开放了<br>";
  }
}
$face = new Order();
echo $face->show();    
echo Cinema::film;
Copier après la connexion


. Deuxièmement, les paramètres sont strictement contraints

Explication : L'exemple ci-dessus hérite de la classe d'interface. Lors de l'appel de la méthode d'interface, les paramètres passés doivent être cohérents avec les noms de paramètres dans l'interface. Sinon, une erreur sera signalée.
<?php
interface Cinema
{
  public function show(Order $show,$num);
}
// 显示正常
class Order implements Cinema
{
  public $number=&#39;0011排&#39;;
  public function show(Order $show,$num)
  {
    echo $show->number.$num;
  }
}
$face= new Order();
$face->show(new Order,$num=&#39;3人&#39;);//输出 0011排3人
Copier après la connexion

3. Héritage entre interfaces et passage de paramètres en appelant l'interface

Explication : Comme vous pouvez le voir dans l'exemple ci-dessus, l'interface Cinemal1 hérite de l'interface Cinemal, classe Ordre Hérité de l'interface Cinema1. Je ne sais pas si vous l'avez remarqué, mais la classe Order comprend deux méthodes, l'une est show et l'autre est show1, et aucune ne manque, une erreur fatale sera signalée. Order1 dans show1(Order1 $object,$num) doit avoir le même nom de classe d'héritage racine que la classe Order1. S'ils sont différents, une erreur fatale sera signalée. Alors, que devons-nous faire si une interface est héritée par plusieurs classes et que les noms de classe sont différents ? Ensuite, vous devez utiliser self, qui sera mentionné ci-dessous
<?php
interface Cinema
{
  public function show();
}
interface Cinema1 extends Cinema
{
  public function show1(Order1 $object,$num);
}
class Order implements Cinema1
{
  public function show()
  {
    echo "准备就绪<br>";
  }
  public function show1(Order1 $object,$num)
  {
    //var_dump($object);
    echo $object->number."$num<br>";
  }
}
class Order1
{
  public $number="0012排";
  function fun(){
    echo &#39; =================&#39;;
  }
}
$show = new Order1;
$show->fun();     
$test = new Order();
$test->show();      
$test->show1($show,$num=&#39;6人&#39;);
// 输出 ===============准备就绪0012排6人
Copier après la connexion

Quatrièmement, héritage multiple d'une interface

La sortie ci-dessus
<?php
interface demo {
  const NAME = "电影名称";
  function fun1();
  function fun2();
}
interface demo2 {
  function fun3();
  function fun4();
}
interface demo3 {
  const TEST = "这里是测试Test";
  function fun5();
}
class MyDemo implements demo, demo2 {
  function fun1() {
    echo "你好";
  }
  function fun2() {
    echo "----------";
  }
  function fun3() {
    echo "我也好<br />";
  }
  function fun4() {
    echo "大家都好<br />";
  }
}
class YourDemo extends MyDemo implements demo3 {
  function fun5() {
    echo "继承类后引用接口";
  }
}
$p = new YourDemo;
$p->fun1();
$p->fun2();
$p->fun3();
$p->fun4();
$p->fun5();
Copier après la connexion

Bonjour - ---------Bonjour à moi

Bonjour à tous

Héritez la classe puis référencez l'interface

Dans l'exemple ci-dessus, nous pouvons voir que l'interface utilise la clé Define it avec le mot-clé interface, et utilise le mot-clé Implements pour implémenter les méthodes dans l'interface. Autre exemple :

Cet exemple montre une application simple d'une interface PHP. Dans cet exemple, l'interface utilisateur implémente la remise de l'utilisateur et la classe VipUser implémente le coefficient de remise spécifique. Enfin, la catégorie de produits Biens implémente différents devis d'utilisateurs basés sur l'interface utilisateur
<?php
//定义接口
interface User{
  function getDiscount();
  function getUserType();
}

class VipUser implements User{ //VIP用户 接口实现
  private $discount = 0.8;  // VIP 用户折扣系数
  function getDiscount() {
    return $this->discount;
  }
  function getUserType() {
    return "VIP用户";
  }
}
class Goods{
  var $price = 88;
  var $vc;
  function run(User $vc){   //定义 User 接口类型参数,这时并不知道是什么用户
    $this->vc = $vc;
    $discount = $this->vc->getDiscount();
    $usertype = $this->vc->getUserType();
    echo $usertype."商品价格:".$this->price*$discount;
  }
}
$display = new Goods();
$display ->run(new VipUser); //VIP用户商品价格:70.4
Copier après la connexion

Enfin résumé :

Résumé. class La différence avec les interfaces Interface est une classe abstraite spéciale, qui peut également être considérée comme la spécification d'un modèle. La différence générale entre une interface et une classe abstraite est la suivante :

1. Si une sous-classe implémente une interface, elle doit implémenter toutes les méthodes de l'interface (qu'elles soient nécessaires ou non) ; , il lui suffit d'implémenter les éléments requis. Utilisez simplement la méthode.

2. Si le nom de la méthode défini dans une interface change, alors toutes les sous-classes qui implémentent cette interface doivent mettre à jour le nom de la méthode de manière synchrone et si le nom de la méthode dans une classe abstraite change, le nom de la méthode correspondant à celle-ci ; la sous-classe ne sera pas affectée, elle deviendra simplement une nouvelle méthode (par rapport à l'ancienne implémentation de la méthode).

3. Les classes abstraites ne peuvent être héritées que individuellement. Lorsqu'une sous-classe doit implémenter des fonctions qui doivent être héritées de plusieurs classes parentes, des interfaces doivent être utilisé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!

É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!