php教程,如何实现类实例方法的连续链式调用?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
链式调用Method Chaining
是在php
代码中一种非常常见的编码技巧,通过每个类里的每一个(其实是大多数)函数都返回$this
,来完成链式调用的链接过程。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验文章总结。测试环境:win10
,nginx@1.15.11
,php@8.2.10-nts
。
核心技术点
这种链式调用都是基于某个类的实例的,这种支持链式调用的类,一般都有个getResult()
之类的方法,作为链式调用的终结。由它来输出一系列操作的结果,也就是说这个函数是不用返回$this
的,而是返回其它的目标数据。
大多数链式调用的方法,都需要接收参数,完善内部的查询结果。同时,最重要的是:在方法的最终要返回值$this
。就是说:通常意义上的method()
,是要返回目标数据的。而链式调用则不是,它返回$this
,会有一个get
类似的方法,来获得存储在内部的处理结果。
链式调用范例
下面的代码,是实现php
链式调用的最简单最常见的例子。
class Sunan
{
protected $result;
protected $hasError = false;
public function a()
{
if (!$this->hasError) {
// 执行正常逻辑
$this->result = ['苏南大叔', 'newsn.net'];
}
return $this;
}
public function b()
{
if (!$this->hasError) {
// 执行正常逻辑,然后报错了
$this->hasError = (bool) mt_rand(0, 1); // 在0和1这两个状态之间,随机报错
}
return $this;
}
public function GetResult()
{
if ($this->hasError) {
$this->result = ['--', '--'];
}
return [$this->result, $this->hasError];
}
}
$sn = new Sunan();
list($result, $hashasError) = $sn->a()->b()->GetResult();
var_dump($result, $hashasError);
输出结果:
array(2) {
[0]=>
string(12) "苏南大叔"
[1]=>
string(9) "newsn.net"
}
bool(false)
或者:
array(2) {
[0]=>
string(2) "--"
[1]=>
string(2) "--"
}
bool(true)
相关文章
- https://newsn.net/say/electron-second-instance.html
- https://newsn.net/say/php-static-method.html
- https://newsn.net/say/php-debug-func.html
- https://newsn.net/say/php-reflect-class.html
结束语
链式调用看起来有些神秘,其实实现上只要注意及时的return $this
即可,没有太特殊的地方。更多苏南大叔的php
经验总结文章,请点击:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。