
平常调用函数:
strlen(trim('011010','0'))
链式操作:
$str->trim('0')->strlen()
代码变优雅了,简单易懂,其实原理很简单。通过魔术方法__call来实现
class case1{ public $value; public function __construct($str = NULL) { $this->value = $str; } public function __call($name, $args){ $this->value = call_user_func($name,$this->value,$args[0]); return $this; } public function strlen(){ return strlen($this->value); } } $str = new case1('0110100'); echo '</br>'.$str->value;//输出0110100 echo '</br>'.$str->trim('0')->strlen();//输出4 echo '</br>'.strlen(trim('0110100','0'));//输出4
这样就实现了一个简单的链式操作。
链式操作的连续调用 最终值取决于 最后调用的那个方法,则最后一个方法 只能返回值 不能是对象就是$this 前面的方法共同点都是处理之后返回自身$this 所以就要在类或基类里申明变量。然后之前的方法对这些变量进行处理赋值 最后通过最后一个方法 返回一个值也可以不用魔术方法,就是直接申明你需要的那个方法
class case1{ public $value; public function __construct($str = NULL) { $this->value = $str; } // public function __call($name, $args){ // $this->value = call_user_func($name,$this->value,$args[0]); // return $this; // } public function trim($val){ $this->value = trim($this->value,$val); return $this; } public function strlen(){ return strlen($this->value); } } $str = new case1('0110100'); echo '</br>'.$str->value; echo '</br>'.$str->trim('0')->strlen(); echo '</br>'.strlen(trim('0110100','0'));输出同样的结果
文章来源: 自己对PHP链式操作的理解
人吐槽 | 人点赞 |
发表评论