17-2细说接口与实现-–PHP实战开发教程

17-2细说接口与实现-–PHP实战开发教程

裂森把纷挠碑硕喂颁善性俏瘦


接口
1.使用关键字:interface
2.类是对象的模板,接口是类的模板
3.接口看作是一个特殊的类
4.接口中的方法,只声明不实现,与抽象类一样
5.接口中的方法必须是public,支持static
6.接口中可以声明类常量const,但不允许被类或子接口覆盖
7.用类实现一个接口使用implements 关键字
8.一个类可以实现多个接口,多个接口之间用逗号分开
9.接口之间也可以使用关键字extends继承
10.一个类实多个接口时,方法不可以重名


新建demo2.php

<?php
//1.声明接口:动物
if(!interface_exists('Animal'))//如果不存在接口Animal
{
    interface Animal
    {
        //声明常量
        const  status = "viable";//存活的

        //接口方法:饲养
        //接口中的所有方法都是抽象方法,不需要abstruct关键字声明
        public function feeding($foods);
    }
}

//2.声明一个类来实现动物接口
if(interface_exists('Animal'))//如果存在接口Animal
{
    class Cat implements Animal
    {
        private $name="猫";

        //必须要实现接口中的抽象方法feeding()
        public function feeding($foods)
        {
            return $this->name."吃".$foods;
        }
    }
}

//实例化Cat
$cat=new Cat();
echo $cat->feeding('老鼠');
echo "<hr>";
//简写上方代码:
echo (new Cat())->feeding('老鼠');//php5.4+

执行:

17-2细说接口与实现-–PHP实战开发教程第1张


继承多接口

<?php
//1.声明接口:动物
if(!interface_exists('Animal'))//如果不存在接口Animal
{
    interface Animal
    {
        //声明常量
        const  status = "viable";//存活的

        //接口方法:饲养
        //接口中的所有方法都是抽象方法,不需要abstruct关键字声明
        public function feeding($foods);
    }
}
//再定义一个接口:动物的特征
interface Feature
{
    public function  hobby($hobby);
}
//类Dog继承接口Animal,Feature
class Dog implements Animal,Feature
{
    private $name="狗";
    //必须实现Animal中的feeding()方法
    public function feeding($foods)
    {
        return $this->name."吃".$foods;
    }
    //必须实现Feature中hobby()方法
    public function hobby($hobby)
    {
        return $hobby;
    }
}

//实例化Dog类
echo (new Dog())->feeding('肉'),"<br>";
echo (new Dog())->hobby('勇敢,忠诚,不离不弃。。。'),"<br>";

执行:

17-2细说接口与实现-–PHP实战开发教程第2张


链式调用:

<?php
//1.声明接口:动物
if(!interface_exists('Animal'))//如果不存在接口Animal
{
    interface Animal
    {
        //声明常量
        const  status = "viable";//存活的

        //接口方法:饲养
        //接口中的所有方法都是抽象方法,不需要abstruct关键字声明
        public function feeding($foods);
    }
}
//再定义一个接口:动物的特征
interface Feature
{
    public function  hobby($hobby);
}
//类Dog继承接口Animal,Feature
class Dog implements Animal,Feature
{
    private $name="狗";
    //必须实现Animal中的feeding()方法
    public function feeding($foods)
    {
        echo $this->name."吃".$foods;
        return $this;//返回Dog对象
    }
    //必须实现Feature中hobby()方法
    public function hobby($hobby)
    {
        echo  $hobby;
        return $this;//返回Dog对象
    }
}

//实例化Dog类
(new Dog())->feeding('肉')->hobby(',忠诚,勇敢,不离不弃。。。');
//如果需要链式调用,必须确保(new Dog())->feeding('肉')返回的是对象,即feeding()的返回值必须是
//对象,即return $this;

执行:

17-2细说接口与实现-–PHP实战开发教程第3张


抹秒擦齐兴挫餐效啃纽拘缎妻