博客列表 >浅入学习PHP的接口与trait的基本语法、使用场景等知识

浅入学习PHP的接口与trait的基本语法、使用场景等知识

emy
emy原创
2020年05月08日 01:29:01653浏览

一、php接口的基本语法和使用场景

A.以下10点小知识,查了一下资料得出,供参考。

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

B.实例说明:

1)单接口

<?php
    // 1:单接口
    // 创建接口
    interface Iemy
    {
        const city = 'foshan';
        public static function  write1();
    }
    // 工作类实现接口
    class  iJuzhu  implements Iemy
    {
        protected static $zone = 'shunde';
        public static function write1()
        {
            return  Iemy::city .  '有个区名叫: ' . self::$zone ;
        }
    }
    // 客户端
    echo Iemy::city , '<br>';
    echo iJuzhu:: write1();

运行结果:

QQ截图20200508004152.jpg

2)多接口继承的实例场景

<?php
// 多接口继承
interface iUser1
{
    const grade1 = '普通会员';
}
// 接口2继承接口1
interface iUser2
{
    const grade2 = '银牌会员';
}
// 接口3继承以上两个接口,即继承接口1和接口2
interface iUser3 extends iUser2
{
    const grade3 = '金牌会员';
    // 抽象方法
    public static function write1();
}
// 工作类
class allgrade implements iUser3
{
    protected static $fenlei = '会员等级';
    // 实现抽象方法
    public static function write1()
    {
        return self::$fenlei . '分别是:' . iuser1::grade1 . '、' . iuser2::grade2 . '、' . iuser3::grade3;
    }
}
// 客户端
echo allgrade::write1();

运行结果:

QQ截图20200508005201.jpg

3)用抽象类来部分实现一个接口

<?php
    // 接口场景3: 用抽象类来部分实现一个接口
    interface iUser1
    {
        const grade = '普通会员';
        const discount = '九折';     
        public static function daiyu1();
        public static function daiyu2();   
        public static function huiyuan();
    }
    // 用抽象类实现接口
    abstract class Huiyuan2 implements iUser1
    {
        public static function huiyuan()
        {
            return '注册会员可以享受折扣';
        }
    }
    // 工作类
    class Xiangshou extends Huiyuan2
    {
        public static function daiyu1()
        {
            return '普通会员享受九折优惠';
        }
        public static function daiyu2()
        {   return '没折扣';      }
        
    }
    // 客户端
    echo Huiyuan2::huiyuan(),'<br>';
    echo Xiangshou::daiyu1();

运行结果:

QQ截图20200508010206.jpg

二、trait 的基本功能及代码复用

trait 的出现就像一个小三,能够促进家庭的和谐发展一样,可以横向的在多个家庭间穿梭,大家都喜欢使用。

1.trait 功能与语法

调用关键字:use
声明关键词:trait
trait里面可以有:静态成员,抽象成员,普通成员;不能使用常量。
trait内的属性会和调用它的类内的同名的属性冲突:
优先顺序:当前类成员 > trait类成员 > 基类成员
一个类可以继承多个trait, 通过逗号相隔;
trait不能在接口中使用。

2.实例说明:

    <?php   
    //利用trait进行简单抽奖小案例
    $jiangpin  = ['课程大礼包价值1000元', '线上课程8节', '学费减免100元', '拉杆箱一个'];
    // 接口
    interface Inewer
    {
        // 随机抽奖机制
        public static function generateId(int $min, int $max): int;
    }
    // trait实现目的
    trait tCreateId
    {
        public static function generateId(int $min, int $max): int
        {
            return mt_rand($min, $max);
        }
    }
    // 工作类
    class Prize implements Inewer
    {
        use tCreateId;
        public static function choujiang(array $jiangpin, int $id)
        {
            return $jiangpin[$id];
        }
    }
    //抽奖结果如下
    $id =  Prize::generateId(0, 4);
    $jiangpin = Prize::choujiang($jiangpin, $id);
    printf('你真幸运,抽中的奖品是: .%s', $jiangpin);

运行结果:

QQ截图20200508012528.jpg

三、总结:PHP小白学的有点辛苦,主要是不知道如何用在项目中,无从下手。但还是想坚持,希望老师不要嫌弃我完成作业慢一点,时间分配好重要。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议