美文网首页
PHP特性 Traits的引入

PHP特性 Traits的引入

作者: 你好667 | 来源:发表于2018-03-05 16:26 被阅读0次

作为一种扩展机制,可以方便的实现一个类库的多继承问题。
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特性 Traits的引入

    作为一种扩展机制,可以方便的实现一个类库的多继承问题。trait是一种为类似 PHP 的单继承语言而准备的代码复用...

  • PHP Traits

    (http://php.net/manual/en/language.oop5.traits.php#langua...

  • PHP中的Traits详解

    PHP中的Traits详解 原文链接:http://tabalt.net/blog/php-tr... PHP是单...

  • PHP中的Traits用法详解

    PHP是单继承的语言,在PHP 5.4 Traits出现之前,PHP的类无法同时从两个基类继承属性或方法。php的...

  • ThinkPHP 5.0 (一)主要特性 和 命名规范

    一、主要特性 ThinkPHP5.0 版本是一个颠覆和重构版本,采用全新的架构思想,引入了更多的PHP新特性,优化...

  • thinkphp5.0 助手函数大全

    load_trait:快速导入Traits,PHP5.5以上无需调用 exception:抛出异常处理 debug...

  • 「php化整为零系列」九、Traits

    该系列我只写我的理解,非官方解释,如不够专业请见谅 PHP是单继承的语言,在PHP 5.4 Traits出现之前,...

  • PHP traits (复用机制)

    最近在学习Laravel中,遇到了很多关于Traits ,查了下资料,分享下。 提到 php 的代码复用,我们可能...

  • PHP5.5 新特性介绍

    最近PHP5.5已经发布,引入了一些新特性。本文将介绍这些特性,并讨论它们可以给开发者带来哪些好处。 生成器(Ge...

  • PHP生命周期与结构体系

    PHP作为开源脚本语言,具有C、Perl、Java等编程语言的特性,由于引入了中间解释层(Zend引擎),所以PH...

网友评论

      本文标题:PHP特性 Traits的引入

      本文链接:https://www.haomeiwen.com/subject/zvphfftx.html