目录
- 概述
- php对象链式操作问题描述
- call_user_func函数详解
- 基于__call魔术方法php对象链式操作代码实现
- php7进阶到架构师相关阅读
概述
这是关于php进阶到架构之 php7核心技术与最佳实战 学习的第 三 篇文章:php7魔术方法__call的最佳实战之链式操作实战
- 第一篇:用房子的思维秒懂php7传值与传引用的区别
- 第二篇:
- 第三篇:php7魔术方法__call的最佳实战之链式操作实战
php对象链式操作问题描述:
call_user_func函数详解
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进阶到架构师相关阅读
最后,欢迎大家留言补充,讨论~~~
海报
168