比如像下面这样该当怎么实现?
$str->trim()->strlen()
call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] ) : mixed
(图片来自网络侵删)call_user_func 函数类似于一种特殊的调用函数的方法,
第一个参数callback是被调用的回调函数,
别的参数是回调函数的参数
利用方法如下:
function sum($a,$b){ return $a + $b;}//第一个参数sum是调用的方法名//第2个参数7和第三个参数8是sum方法调用的参数$result = call_user_func('sum',7,8);echo $result;//输出结果15
基于魔术方法__call实现php工具链式操作如何通过类的魔术方法__call实现$str->trim()->strlen()的链式操作呢?
实现思路:
首先定义一个字符串类StringHelper,布局函数直接赋值value,
然后链式调用trim()和strlen()函数,
通过在调用的邪术函数__call()中利用
代码实现如下:
class StringHelper{ public $value; public function __construct($str) { $this->value = $str; } public function __call($name, $arguments) { $this->value = call_user_func($name,$this->value); return $this; }}$str = new StringHelper(' hello '); $result = $str->trim()->strlen(); //1.$str->trim(),由于StringHelper类没有trim方法,这时候调用__call魔术方法 //2.__call($name, $arguments)中$name的值是trim //3.call_user_func的第一个参数值为调用的方法名trim,第二个参数便是$this->value//$str->strlen()实行流程同$str->trim() echo $result->value;
运行结果
5
php7进阶到架构师干系阅读https://www.kancloud.cn/gofor/gofor
末了,欢迎大家留言补充,谈论~~~