PHP实现链式操作的三种方法详解


Posted in PHP onNovember 16, 2017

本文实例讲述了PHP实现链式操作的三种方法。分享给大家供大家参考,具体如下:

在php中有很多字符串函数,例如要先过滤字符串收尾的空格,再求出其长度,一般的写法是:

strlen(trim($str))

如果要实现类似js中的链式操作,比如像下面这样应该怎么写?

$str->trim()->strlen()

下面分别用三种方式来实现:

方法一、使用魔法函数__call结合call_user_func来实现

思想:首先定义一个字符串类StringHelper,构造函数直接赋值value,然后链式调用trim()和strlen()函数,通过在调用的魔法函数__call()中使用call_user_func来处理调用关系,实现如下:

<?php
class StringHelper 
{
  private $value;
  function __construct($value)
  {
    $this->value = $value;
  }
  function __call($function, $args){
    $this->value = call_user_func($function, $this->value, $args[0]);
    return $this;
  }
  function strlen() {
    return strlen($this->value);
  }
}
$str = new StringHelper(" sd f 0");
echo $str->trim('0')->strlen();

终端执行脚本:

php test.php 
8

方法二、使用魔法函数__call结合call_user_func_array来实现

<?php
class StringHelper 
{
  private $value;
  function __construct($value)
  {
    $this->value = $value;
  }
  function __call($function, $args){
    array_unshift($args, $this->value);
    $this->value = call_user_func_array($function, $args);
    return $this;
  }
  function strlen() {
    return strlen($this->value);
  }
}
$str = new StringHelper(" sd f 0");
echo $str->trim('0')->strlen();

说明:

array_unshift(array,value1,value2,value3...)

array_unshift() 函数用于向数组插入新元素。新数组的值将被插入到数组的开头。

call_user_func()call_user_func_array都是动态调用函数的方法,区别在于参数的传递方式不同。

方法三、不使用魔法函数__call来实现

只需要修改_call()trim()函数即可:

public function trim($t)
{
  $this->value = trim($this->value, $t);
  return $this;
}

重点在于,返回$this指针,方便调用后者函数。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
VB中的RasEnumConnections函数返回632错误解决方法
Jul 29 PHP
20个2014年最优秀的PHP框架回顾
Oct 22 PHP
php中try catch捕获异常实例详解
Nov 21 PHP
老版本PHP转义Json里的特殊字符的函数
Jun 08 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
Dec 31 PHP
深入浅析php中sprintf与printf函数的用法及区别
Jan 08 PHP
PHP实现文件上传与下载实例与总结
Mar 13 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
Jul 21 PHP
Yii2增删改查之查询 where参数详细介绍
Aug 08 PHP
php实现购物车功能(以大苹果购物网为例)
Mar 09 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
Mar 15 PHP
php7连接MySQL实现简易查询程序的方法
Oct 13 PHP
thinkphp5.0自定义验证规则使用方法
Nov 16 #PHP
PHP实现验证码校验功能
Nov 16 #PHP
学习thinkphp5.0验证类使用方法
Nov 16 #PHP
thinkPHP中钩子的使用方法实例分析
Nov 16 #PHP
php表单处理操作
Nov 16 #PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 #PHP
Laravel下生成验证码的类
Nov 15 #PHP
You might like
用PHP创建PDF中文文档
2006/10/09 PHP
PHP中Trait及其应用详解
2017/02/14 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
jQuery TextBox自动完成条
2009/07/22 Javascript
javascript 语法基础 想学习js的朋友可以看看
2009/12/16 Javascript
jQuery学习笔记之Helloworld
2010/12/22 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
2013/02/25 Javascript
JavaScript实现关键字高亮功能
2014/11/12 Javascript
javascript中scrollTop详解
2015/04/13 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
2015/04/22 Javascript
Bootstarp 基础教程之表单部分实例代码
2017/02/03 Javascript
JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)
2017/03/30 Javascript
vue下history模式刷新后404错误解决方法
2018/08/18 Javascript
代码分析vue中如何配置less
2018/09/28 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
2019/08/07 Javascript
Vue formData实现图片上传
2019/08/20 Javascript
mpvue实现左侧导航与右侧内容的联动
2019/10/21 Javascript
[04:46]2018年度玩家喜爱的电竞媒体-完美盛典
2018/12/16 DOTA
Python脚本实现代码行数统计代码分享
2015/03/10 Python
python实现生命游戏的示例代码(Game of Life)
2018/01/24 Python
详解django的serializer序列化model几种方法
2018/10/16 Python
python看某个模块的版本方法
2018/10/16 Python
PyCharm鼠标右键不显示Run unittest的解决方法
2018/11/30 Python
Python 判断图像是否读取成功的方法
2019/01/26 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
2020/06/02 Python
2021年的Python 时间轴和即将推出的功能详解
2020/07/27 Python
5 个强大的HTML5 API 函数推荐
2014/11/19 HTML / CSS
英国领先的奢侈品零售商之一:CRUISE
2016/12/02 全球购物
丝芙兰中国官方商城:SEPHORA中国
2018/01/10 全球购物
Merchant 1948澳大利亚:新西兰领先的鞋类和靴子供应商
2018/03/24 全球购物
美国领先的个性化礼品商城:Personalization Mall
2019/07/27 全球购物
密封类可以有虚函数吗
2014/08/11 面试题
工作睡觉检讨书
2014/02/25 职场文书
应届生简历自我评价
2015/03/11 职场文书
网络舆情信息简报
2015/07/21 职场文书
小学生班干部竞选稿
2015/11/20 职场文书