多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
#### 使用trait trait是一种为类似 PHP 的单继承语言而准备的代码复用机制。trait为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用方法集。trait和类组合的语义是定义了一种方式来减少复杂性,避免传统多继承和混入类(Mixin)相关的典型问题。 如果你没有继承系统的控制器基类,但是又希望能使用think\Controller控制器基类的一些方法,可以引入trait。 ~~~ <?php namespace app\index\controller; class Index { use \traits\controller\Jump; public function hello() { return 'hello'; } } ~~~ 引入`trait`的方式用的也是`use语法`,但和引入类完全不同,建议规范是在类的主体代码开头引入`trait`。 现在我们可以直接使用`\traits\controller\Jump`中定义的方法,包括`success/error/result/redirect`(后续我们会专门提到这些方法)。 由于`PHP5.4`版本不支持`trait`的自动加载,因此如果是`PHP5.4版本`,必须手动导入`trait类库`,系统提供了一个助手函数`load_trait`,用于自动加载`trait类库`,例如,可以这样正确引入`trait类库`。 ~~~ <?php namespace app\index\controller; load_trait('controller/Jump'); class Index { use \traits\controller\Jump; public function hello() { return 'hello'; } } ~~~ 在`PHP5.5+`版本中不要重复使用`load_trait`和`use`加载`trait`,以免造成错误。 一个类中可以引入多个`trait`,更多的关于`trait`内容可以参考PHP官方手册。 用例: ![](https://box.kancloud.cn/4605278df8d19befc65963608d08bd1c_1144x571.png) ~~~ <?php namespace app\index\controller\traits; use think\Debug; trait CurlRequest { protected $model; /** * 清空表复位主键序号 * * @return void */ public function clearTbl() { $this->model->clearTbl(); $rtn['success'] = true; _callback($rtn); } } ~~~ 引用: ~~~ <?php namespace app\index\controller; use app\common\controller\Base; use app\index\model\Retention as RetentionModel; /** * 留存日志 */ class Retention extends Base { use \app\index\controller\traits\CurlRequest; protected $model; /** * 控制器初始化 * @return void */ public function _initialize() { //基类授权 // parent::_initialize(); $this->model = new RetentionModel(); } } ~~~