thinkphp5.0Traits引入

摘要:
ThinkPaPHP 5.0开始使用trait函数作为扩展机制,以便于实现类库的多重继承。特性是一种类似于PHP的单一继承语言的代码重用机制。这些系统中内置trait类库的根命名空间使用trait而不是trait,以避免与系统关键字冲突。trait方法引入的类库需要注意优先级。从基类继承的成员被特征插入的成员覆盖。优先级是当前类的成员重写trait方法,而trait重写继承的方法。有关特性的更多信息,请参阅官方PHP手册。

ThinkPHP 5.0开始采用trait功能(PHP5.4+)来作为一种扩展机制,可以方便的实现一个类库的多继承问题。

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

但由于PHP5.4版本不支持trait的自动加载,因此如果是PHP5.4版本,必须手动导入trait类库,系统提供了一个助手函数load_trait,用于自动加载trait类库,例如,可以这样正确引入trait类库。

namespace appindexcontroller;

load_trait('controller/Jump');  // 引入traitscontrollerJump

class index
{
     use traitscontrollerJump;

     public function index()
     {
         $this->assign('name','value');
         $this->show('index');
     }
}

如果你的PHP版本大于5.5的话,则可以省略load_trait函数引入trait

namespace appindexcontroller;

class index
{
     use traitscontrollerJump;

     public function index()
     {

     }
}

可以支持同时引入多个trait类库,例如:

namespace appindexcontroller;

load_trait('controller/Other');
load_trait('controller/Jump');

class index
{
     use traitscontrollerOther;
     use traitscontrollerJump;

     public function index()
     {

     }
}

或者使用

namespace appindexcontroller;

load_trait('controller/Other');
load_trait('controller/Jump');

class index
{
     use traitscontrollerOther,traitscontrollerJump;

     public function index()
     {

     }
}

系统提供了一些封装好的trait类库,主要是用于控制器和模型类的扩展。这些系统内置的trait类库的根命名空间采用traits而不是trait,是因为避免和系统的关键字冲突。

trait 方式引入的类库需要注意优先级,从基类继承的成员被 trait 插入的成员所覆盖。优先顺序是来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法。

trait 类中不支持定义类的常量,在 trait 中定义的属性将不能在当前类中或者继承的类中重新定义。

冲突的解决

我们可以在一个类库中引入多个trait类库,如果两个 trait 都定义了一个同名的方法,如果没有明确解决冲突将会产生一个致命错误。

为了解决多个 trait 在同一个类中的命名冲突,需要使用 insteadof 操作符来明确指定使用冲突方法中的哪一个。

以上方式仅允许排除掉其它方法,as 操作符可以将其中一个冲突的方法以另一个名称来引入。

更多的关于traits的内容可以参考PHP官方手册

免责声明:文章转载自《thinkphp5.0Traits引入》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇xposed云闪付免签支付系统源码关于Ubuntu共享文件夹的设置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

PHP7革新与性能优化

有幸参与2015年的PHP技术峰会(PHPCON),听了鸟哥(惠新宸)的关于PHP7的新特性和性能优化的分享,一切都令人感到激动。鸟哥是国内最权威的PHP专家,他的分享有很多非常有价值的东西,我通过整理分享的PPT和收集相关资料,整理为这篇解读性质的技术文章,希望能给做PHP开发的同学一些帮助。 PHP已经走过了20年的历史,直到今天,PHP7都发布了R...

Debian下Apache2 Mysql5 Php5的安顿设置配备铺排

 安顿AMP apt-get install apache2 mysql-server php5 php5-mysql5   设置配备铺排 Apache2 默许站点 vi /etc/apache2/sites-enabled/000-default   插足一行 RedirectMatch ^/$ /apache2-default/   实验这一...

如何在PHP5中通过PDO连接SQLite3数据库

  通过PHP跟PDO配置SQLite数据库是一件很繁琐的事情,经过一下午的研究,终于理清了里面的思路。现在拿出来跟大家共享。初学,错误请指出。 首先我们先选择要使用的web server 软件,由于从兼容性跟性能方面的需求,我选择了目前来说最新版的apache。 第二步,我们要使用目前最新版本的PHP zip package .这里提示大家一下,经过我痛...

PHP控制类中方法的访问权限

1.访问方式: PHP5提供了3种访问方式: (1)public:可以被毫无限制地访问,类外部的任何代码都可以读写public属性,在PHP5之前的版本中,所有的方法和属性都是public。 (2)private:只在类的内部可见,类中的任何成员和类实例都可以访问private成员,在所在类之外,不能改变或者读取private属性的值,也不能调用priva...

Ubuntu下lamp(PHP+Mysql+Apache)搭建+完全卸载卸载方法

安装apache2 sudo apt-get install apache2 安装完成,运行如下命令重启下: sudo /etc/init.d/apache2 restart 在浏览器里输入http://localhost或者是http://127.0.0.1,如果看到了“It works!“,那就说明Apache就成功的安装了,Apache的默认安装,会...

Windows 2003+IIS6+PHP5.4+配置PHP支持空间的方法

写在前面1、如果无论怎么弄都无法让php支持连接mssql则可以下载 FreeTDS 插件5.3,以便访问 SQL Server 数据库 php5.2 Thread Safe http://download.moodle.org/download.php/dblib/php52/DBLIB_TS.zip NOT Thread Safe http://dow...