PHP系列 | 代码复用trait的构造函数使用
2021/6/5 1:21:39
本文主要是介绍PHP系列 | 代码复用trait的构造函数使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在ThinkPHP5.1 框架中自己封装了一个 trait 类,每次都在控制器中使用,但是在使用框架自身的验证器类(框架控制器方法)报错
在控制器中使用自定义验证器
$param = $this->request->post(); $result = $this->validate($param, LiveValidate::class); if (true !== $result) { return response_json(1, $result); }
日志错误信息:
[ error ] [0]致命错误: Call to a member function validate() on null[/var/www/www.tinywan.com/thinkphp/library/think/Controller.php:251]
以上错误就是由于应用了自定义的 trait 类导致的,如果移除该 trait 类则不会报错,加入以后就会报错。、
原因分析:
为何调用不了父类的控制器方法。由于自定义 trait 类 没有继承框架的构架方法。
解决办法:
在trait 类的构架方法中,继承父类的构架方法,解决问题
测试案例
基类控制器(模拟TP自带控制器)
class MyBaseController { /** * MyBaseController constructor. */ public function __construct() { echo " MyBaseController基类构架方法<br/>"; } /** * @desc: 基类-验证器 */ public function validate() { echo "基类-验证器 <br/>"; } }
自定义trait 类
trait MyTrait { protected $var = "MyTrait_var"; /** * MyTrait constructor. */ function __construct() { parent::__construct(); echo "MyTrait 构架方法 <br/>"; } /** * @desc: 添加 */ function create() { echo "MyTrait create方法 <br/>"; } }
控制器子类,继承控制器父类 MyBaseController
class MyBaseController { /** * MyBaseController constructor. */ public function __construct() { echo " MyBaseController基类构架方法<br/>"; } /** * @desc: 基类-验证器 */ public function validate() { echo "基类-验证器 <br/>"; } }
调用控制器子类
public function traitsDemo() { $obj = new MyController(); var_dump($obj->validate()); var_dump($obj->create()); var_dump($obj->hello()); }
打印结果
MyBaseController基类构架方法 MyTrait 构架方法 基类-验证器 MyTrait create方法 MyController 子类 hello方法
这篇关于PHP系列 | 代码复用trait的构造函数使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-03-29env: php: no such file or directory
- 2024-03-01php foreach break
- 2024-02-26Exception参数 php-icode9专业技术文章分享
- 2023-12-30PHP文件批量上传-icode9专业技术文章分享
- 2023-12-30thinkphp6 withJoin-icode9专业技术文章分享
- 2023-12-27MagicArray:像php一样,让Go业务代码不再卷!
- 2023-11-18centos7编译安装PHP教程。
- 2023-11-18centos7编译安装phpMyAdmin教程。
- 2023-10-13唱衰这么多年,PHP 仍然还是你大爷!
- 2023-07-25PHP8,性能更好,语法更好,类型安全更完善