您的位置 首页 php

php7魔术方法__call的最佳实战之链式操作实现

目录

  • 概述
  • 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进阶到架构师相关阅读

最后,欢迎大家留言补充,讨论~~~

文章来源:智云一二三科技

文章标题:php7魔术方法__call的最佳实战之链式操作实现

文章地址:https://www.zhihuclub.com/77680.shtml

关于作者: 智云科技

热门文章

网站地图