开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1590|回复: 0
收起左侧

[PHP相关教程] PHP - 面向接口编程

[复制链接]
发表于 2020-7-19 11:02:09 | 显示全部楼层 |阅读模式   山东省德州市
[md]## 1. 接口使用场景:接口的多继承

```PHP
<?php

// 接口的使用场景2 :多接口继承
// 接口可以突破php类的继承限制,允许多继承,实现多层级的接口

// 创建第一个接口
interface api_1
{

  const NAME = 'michael';

}

// 第二个继承第一个
interface api_2 extends api_1{
    const AGE = 25;
}

// 第三个继承前两个

interface api_3 extends api_1 ,api_2{
    //  接口抽象方法
    public function user();
}

// 实现接口类
// 因为上面的接口api_3已经继承了前两个,所以这里只写api_3即可,当然也支持加上 ’api_1,api_2‘
class Name  implements api_3
{
    // 先实现抽象方法
    public  function user(){
        return '姓名:'.api_3::NAME;
    }
}

echo (new Name)->user();
```
## 2. trait
```php
//trait 功能与语法 PHP5.4+ 实现代码的复用
//trait 与抽象类,接口 一样不能被实例化,只能嵌入到宿主类中使用
//trait 是一个特殊类:只能使用 常规 静态 抽象  不能用类常量
trait tDemo
{
//    常规属性
    protected $name = 'michael';

//常规方法
    public function getName()
    {
        return $this->name;
    }

//    静态属性
    public static $sex = '男';

//静态方法
    public function getSex()
    {
        return self::$sex;
    }

//    抽象属性

    public static $age;

//    抽象方法


    abstract public static function setAge();
}

//创建工作类引用
class Demo
{
    use tDemo;

    public static function setAge()
    {
        return self::$age;
    }
}

//访问
Demo::$age = 30;
echo Demo::setAge();

echo '<hr>';
$demo = new Demo();
echo '姓名'.$demo->getName().'年龄:'.Demo::setAge().'性别'.Demo::getSex();
```
```php
<?php
//trait 功能1 代码复用

//创建一个公共方法库
trait Means{
//    乘法
    public function Way_1($a,$b){
        return $a*$b;
    }
    //    除法
    public function Way_2($a,$b){
        return $a/$b;
    }
    //    加法
    public function Way_3($a,$b){
        return $a+$b;
    }
    //    减法
    public function Way_4($a,$b){
        return $a-$b;
    }
}

//实现类
class White
{
    use Means;
}

//创建类示例
$white = new White;
//乘法
echo $white->Way_1(2,8).'<hr>';
//除法
echo $white->Way_2(8,2).'<hr>';
//加法
echo $white->Way_3(2,8).'<hr>';
//减法
echo $white->Way_4(8,2).'<hr>';

//输出  16 4 10 6
```

## trait 在继承上下文环境中,具有优先级,通过优先设置,降低单继承的影响
> 优先级比较  当前类 > trait > 当前类的父类
>trait 中只写方法不要写属性,否则会跟宿主类中的同名属性发生冲突产生致命错误


您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表