Summarize the role of implements in php

零下一度
Release: 2023-03-10 15:56:02
Original
2468 people have browsed it

The application keywords of the interface in the php class are interface and implements. The interface is a member. Attributes are all abstract or special special constants.Abstract class,implements are mainly for classes. The name, the methods owned by the class, and the passed parameters serve as constraints and specifications, a bit like abstract abstract class

The application keywords of the interface in the php class are interface and implements, and the interface is a member attribute All special abstract classes are abstract or constant. Implements mainly constrains and regulates the class name, the methods owned by the class, and the passed parameters, which is a bit like abstract abstract classes.

Application of interface in class

1. Keyword: interface

2. Keyword: implements

1. Introduction and creation of interface

Interface: a special abstract class whose member attributes are all abstract or constant.

Rules:

1. All methods in the class are abstract.

2. There is no need to add abstract for abstract methods.

3. The interface abstract method attribute is public.

4. Member attributes must be constants.

The format code is as follows:


interface demo { 
const NAME = "常量对象属性"; 
function myfun1(); //抽象方法
function myfun2(); //抽象方法,不用具体写入逻辑 
}
Copy after login

1. Definition and calling of the interface


<?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;
Copy after login

Note: One thing to note in the above example is that the method name of the interface is show, and the class that inherits the interface must have the show method, otherwise an error will be reported. In other words, the methods of the interface are fake, and what really works are the methods in the inherited class. Is the interface here a bit similar to the abstract class of PHP?

Second, The parameters are strictly constrained


<?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人
Copy after login

Explanation: The above example inherits the interface class. When calling the interface method, the parameters passed must be consistent with the parameters in the interface. The name comes once. Otherwise, an error will be reported.

3. Inheritance between interfaces and passing parameters by calling the interface


<?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人
Copy after login

Explanation: As you can see from the above example, the interface Cinema1 It inherits the interface Cinemal, and the class Order inherits the interface Cinema1. I don’t know if you have noticed that the class Order includes two methods, one is show and the other is show1, and no one is missing. If one is missing, a fatal error will be reported. Order1 in show1(Order1 $object,$num) must have the same root inheritance class name as class Order1. If they are different, a fatal error will be reported. So what should you do if an interface is inherited by multiple classes and the class names are different? Then you have to use self, which will be mentioned below

Four, multiple inheritance of one interface


<?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();
Copy after login

The above output

Hello----------Me, too

Hello everyone

Inherit the class and then reference the interface

In the above example we You can see that interfaces are defined using the keyword interface, and the keyword implements is used to implement the methods in the interface. Another example:


<?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
Copy after login

This example demonstrates a Simple application of PHP interface. In this example, the User interface implements the user's discount, and the VipUser class implements the specific discount coefficient. Finally, the product category Goods implements different user quotes based on the User interface.

Finally summarized:

##Abstract class The difference with interface

Interface is a special abstract class, which can also be regarded as the specification of a model. The general difference between an interface and an abstract class is as follows:

1. If a subclass implements an interface, it must implement all methods in the interface (whether needed or not); if it inherits an abstract class, it only needs to implement the required Just the method.

2. If the method name defined in an interface changes, then all subclasses that implement this interface need to update the method name synchronously; and if the method name changes in an abstract class, the method name corresponding to its subclass will It is not affected, it just becomes a new method (relative to the old method implementation).

3. Abstract classes can only be inherited singly. When a subclass needs to implement functions that need to be inherited from multiple parent classes, interfaces must be used.

The above is the detailed content of Summarize the role of implements in php. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template