Blogger Information
Blog 31
fans 0
comment 0
visits 30286
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
浅入学习PHP的接口与trait的基本语法、使用场景等知识
emy
Original
654 people have browsed it

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

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:总结的相当棒, 建议背诵下来
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post