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 相关文章推荐
php.ini中文版
Oct 09 PHP
PHP 和 MySQL 开发的 8 个技巧
Jan 02 PHP
php图片验证码代码
Mar 27 PHP
PHP批量生成缩略图的代码
Jul 19 PHP
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
Jun 29 PHP
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
Sep 30 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
Jun 12 PHP
PHP函数func_num_args用法实例分析
Dec 07 PHP
php微信公众号开发之现金红包
Apr 16 PHP
PHP面向对象程序设计继承用法简单示例
Dec 28 PHP
详解PHP中curl_multi并发的实现
Jun 08 PHP
PHP基于array_unique实现二维数组去重
Jul 14 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
phpfans留言版用到的数据操作类和分页类
2007/01/04 PHP
php IP及IP段进行访问限制的代码
2008/12/17 PHP
PHP zip扩展Linux下安装过程分享
2014/05/05 PHP
微信支付开发交易通知实例
2016/07/12 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
Javascript下的keyCode键码值表
2007/04/10 Javascript
form中限制文本字节数js代码
2007/06/10 Javascript
jquery pagination插件实现无刷新分页代码
2009/10/13 Javascript
JavaScript 闭包在封装函数时的简单分析
2009/11/28 Javascript
jQuery1.4.2与老版本json格式兼容的解决方法
2011/02/12 Javascript
google jQuery 引用文件,jQuery 引用地址集合(jquery 1.2.6至jquery1.5.2)
2011/04/24 Javascript
JS焦点图切换,上下翻转
2011/05/12 Javascript
Jquery操作radio的简单实例
2014/01/06 Javascript
JavaScript判断浏览器类型的方法
2015/02/10 Javascript
jQuery选择器源码解读(五):tokenize的解析过程
2015/03/31 Javascript
超漂亮的jQuery图片轮播特效
2015/11/24 Javascript
JavaScript类型系统之正则表达式
2016/01/05 Javascript
Jquery Easyui选项卡组件Tab使用详解(10)
2016/12/18 Javascript
微信小程序 支付简单实例及注意事项
2017/01/06 Javascript
js 用于检测类数组对象的函数方法
2017/05/02 Javascript
vue下拉列表功能实例代码
2018/04/08 Javascript
JavaScript数组排序的六种常见算法总结
2020/08/18 Javascript
python实现定制交互式命令行的方法
2014/07/03 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
2018/04/19 Python
python实现共轭梯度法
2019/07/03 Python
python的debug实用工具 pdb详解
2019/07/12 Python
django表单的Widgets使用详解
2019/07/22 Python
django基于存储在前端的token用户认证解析
2019/08/06 Python
Numpy将二维数组添加到空数组的实现
2019/12/05 Python
CSS3制作文字半透明倒影效果的两种实现方式
2014/08/08 HTML / CSS
美国著名的团购网站:Woot
2016/08/02 全球购物
彪马西班牙官网:PUMA西班牙
2019/06/18 全球购物
护士的自我鉴定
2014/02/07 职场文书
关于读书的演讲稿500字
2014/08/27 职场文书
黄石寨导游词
2015/02/05 职场文书
公司开业主持词
2015/07/02 职场文书