thinkphp5.0Traits引入

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

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

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

namespace app\index\controller;

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

class index
{
     use \traits\controller\Jump;

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

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

namespace app\index\controller;

class index
{
     use \traits\controller\Jump;

     public function index()
     {

     }
}

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

namespace app\index\controller;

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

class index
{
     use \traits\controller\Other;
     use \traits\controller\Jump;

     public function index()
     {

     }
}

或者使用

namespace app\index\controller;

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

class index
{
     use \traits\controller\Other,\traits\controller\Jump;

     public function index()
     {

     }
}

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

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

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

冲突的解决

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

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

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

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

时间: 2024-11-06 09:07:27

thinkphp5.0Traits引入的相关文章

ThinkPHP5框架引入的css等外部资源文件没有生效

静态资源文件一般是放在public目录里,不只是css,只要是静态资源文件都没有显示出来. (更好的阅读体验可访问 这里 ) 问题陈述 文件结构 文件内容 三个文件分别为:Index.php.test.html.test.css //Index.php <?php namespace app\index\controller; use think\Controller; class Index extends Controller { public function index() { retu

ThinkPHP5.0(2)对MVC的理解(1),引入控制器,静态页,静态常量!

1.首先,创建一个分组,当然你也可以删去或修改index的那个分组,我给新建了一个admin分组 2.在控制器分组下,新建一个文件,与ThinkPHP3不同,ThinkPHP5,简化了名字,不需要写AdminController.class.php,只需写Admin.php即可.注意:首字母大写! 3.先写好控制器,注意命名空间! 4.在视图下创建对应的控制器文件夹: 5.引进html文件: 6.先看看效果!此时未引进css文件和js等.输入网址时,不必担心控制器等首字母大写问题,系统会默认将网

ubuntu14.04上引入thinkphp5类库遇到的一个问题

ubuntu14.04 上加载OSS\OssClient() ;--->在vendor文件夹下的文件要用大写OSS 小写的报错 无法加载类库 Vendor('OSS.autoload');//引入文件 $accessKeyId = ""; $accessKeySecret = ""; $endpoint = ""; try { $ossClient = new \OSS\OssClient($accessKeyId, $accessKeyS

百度UEditor 用require 引入 Thinkphp5 ,图片上传问题

用require引入,用了10分钟:上传图片,用了一个早上(吐血一地.....) 重点:require引入成功后,在需要引用UEditor的文件开头加入(ue的文件夹路径) window.UEDITOR_HOME_URL = "/static/plugins/ueditor/1.4.3/"; 其实配置文件有写,普通引入是不需要的,但是用require引入就是必要的

ThinkPHP5修改默认的程序入口

ThinkPHP5与之前的版本不同,引入的命名空间.而且在文件的目录上也发生了变化. project 应用部署目录 ├─composer.json         composer定义文件 ├─README.md             README文件 ├─build.php             自动生成定义文件(参考) ├─LICENSE.txt           授权说明文件 ├─application           应用目录(可设置) │ ├─common          

ThinkPHP5中使用Workerman框架

ThinkPHP框架不多说,强悍之处不容置疑.有疑问看官方手册 Workerman框架也是非常强悍的(开发框架人的背景不是很清楚),官方是这样介绍的: Workerman,让你看到PHP不为人知的一面. 当然详细的介绍WM官方也给出了非常详细的手册. 这里也并不打算长篇的介绍和吹嘘TP与WM的强悍的话. 以前在使用TP3.2.3的时候,就接触使用了Workerman框架,但当时TP官方并没有把WM集成进来, 也就分开独立使用两个框架了,各司其职. 现在TP5中已经把WM作为扩展集成进来了. 集成

Windows下用Composer引入官方GitHub扩展包

Windows下用Composer引入官方GitHub扩展包 1. 当你打开威武RC4版本的链接的时候,往下拉你可以看到这个,然后你要做的就是想到,百度Composer,看看是个什么鬼,别想太多,跟着我走.接下来点击Composer中文文档,再点击下载你会看到下载完后,点开如图所示点击next后发现不知道怎么继续,正常,这里是提示你选择php文件夹下面的php.exe文件,这里我选好再截图如下:到这里一般再点击下一步等上三分钟左右就没什么问题啦,这个随便你个人喜好,我是没有点直接一直next到f

写下thinkphp5和thinkphp3.2的不同

只列出一些自己的直观感受 1 引入了命令行,估计来源是laravel,前阵子刚练手完laravel5.0的系统, 感觉thinkphp5的命令行和laravel的很像 2 引入了路由,来源估计也是laravel,前阵子刚练完laravel5.0的系统, 这个引入不是说thinkphp3.2没有这个功能,是专门做了个路由的文件和laravel5.0类似 3文件的命名发生了一些变化,原来的控制器包含class名等等 4原来的配置文件是根据分组来的,现在的配置文件可以分模块,当然也可以分组 5引入co

thinkphp5.0自动加载

概述 ThinkPHP5.0 真正实现了按需加载,所有类库采用自动加载机制,并且支持类库映射和composer类库的自动加载. 自动加载的实现由think\Loader类库完成,自动加载规范符合PHP的PSR-4. 自动加载 由于新版ThinkPHP完全采用了命名空间的特性,因此只需要给类库正确定义所在的命名空间,而命名空间的路径与类库文件的目录一致,那么就可以实现类的自动加载. 类库的自动加载检测顺序如下: 1.类库映射检测:2.PSR-4自动加载检测:3.PSR-0自动加载检测: 系统会按顺