PHP特性 Traits的引入

作为一种扩展机制,可以方便的实现一个类库的多继承问题。
trait是一种为类似 PHP 的单继承语言而准备的代码复用机制。trait为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用方法集。trait和类组合的语义是定义了一种方式来减少复杂性,避免传统多继承和混入类(Mixin)相关的典型问题。

一句话总结:把重复的方法拆分到一个文件,通过 use 引入以达到代码复用的目的。

namespace app\index\controller;

load_trait('controller/Jump');  // 引入traits\controller\Jump

class index
{
     use \traits\controller\Jump; //一个jump方法独立出来的,实现代码的复用
     
     public function index()
     {
         $this->assign('name','value');
         $this->show('index');
     }
}

Trait 注意点
一、优先级
Trait 方法 > extends 方法 > 类方法

二、Trait 方法名冲突的解决

如下面的情况:

<?php
trait ta {
public function demo () {
echo 'ta';
}
}

trait tb {
public function demo () {
echo 'tb';
}
}

class A {
use ta,tb;
}

$a = new A();
$a->demo();
运行会报错:

PHP Fatal error: Trait method demo has not been applied, because there are collisions with other trait methods on A
Trait 方法名冲突了,解决方法有下:

insteadof
class A {
use ta,tb {
tb::demo insteadof ta;
}
}
运行结果:

tb
tb::demo insteadof ta 这句代码的意思就是用 tb 中的 demo 方法替代 ta 中的 demo 方法。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 众所周知,一直以来PHP和很多语言一样是单继承的语言,但是常常在编码过程中,我们需要在当前类中使用两个或两个...
    金星show阅读 5,840评论 0 3
  • Scala与Java的关系 Scala与Java的关系是非常紧密的!! 因为Scala是基于Java虚拟机,也就是...
    灯火gg阅读 8,806评论 1 24
  • 本文参加#未完待续,就要表白#活动,本人承诺,文章内容为原创,且未在其他平台发表过。 转眼间已经来...
    章鱼爱生气阅读 1,657评论 1 1
  • 《中医体质分类判定标准》 中医体质分类与判定 来源:中国中医药报作者:中国中医药报 编者按:中华中医药学会2009...
    NathanLiang阅读 11,375评论 0 14
  • 听完徐老师的“一条”商业分析,生活美学志,然后转变成商业,有好多话想写。不知道有多少人跟我是一样的呢? 我分析其中...
    三锦囊的猫阅读 3,297评论 0 0