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 相关文章推荐
基于Windows下Apache PHP5.3.1安装教程
Jan 08 PHP
由php的call_user_func传reference引发的思考
Jul 23 PHP
PHP生成excel时单元格内换行问题的解决方法
Aug 26 PHP
工厂模式在Zend Framework中应用介绍
Jul 10 PHP
PHP代码保护--Zend Guard的使用详解
Jun 03 PHP
PHP跳转页面的几种实现方法详解
Jun 08 PHP
php字符串截取函数用法分析
Nov 25 PHP
php+webSoket实现聊天室示例代码(附源码)
Feb 17 PHP
wordpress自定义标签云与随机获取标签的方法详解
Mar 22 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
Oct 15 PHP
Laravel5.1 框架响应基本用法实例分析
Jan 04 PHP
php计数排序算法的实现代码(附四个实例代码)
Mar 31 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
用Socket发送电子邮件
2006/10/09 PHP
解析PHP汉字转换拼音的类
2013/06/18 PHP
使用PHP下载CSS文件中的图片的代码
2013/09/24 PHP
php 修改、增加xml结点属性的实现代码
2013/10/22 PHP
PHP面向对象自动加载机制原理与用法分析
2016/10/14 PHP
jQuery 性能优化手册 推荐
2010/02/23 Javascript
浏览器解析js生成的html出现样式问题的解决方法
2012/04/16 Javascript
JQuery 常用方法和事件详细介绍
2013/04/18 Javascript
js如何实现设计模式中的模板方法
2013/07/23 Javascript
js中数组Array的一些常用方法总结
2013/08/12 Javascript
用于deeplink的js方法(判断手机是否安装app)
2014/04/02 Javascript
js实现从中间开始往上下展开网页窗口的方法
2015/03/02 Javascript
基于javascript实现简单计算器功能
2016/01/03 Javascript
基于javascript实现句子翻牌网页版小游戏
2016/03/23 Javascript
AngularJS实现单独作用域内的数据操作
2016/09/05 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
使用Javascript判断浏览器终端设备(PC、IOS(iphone)、Android)
2017/01/04 Javascript
原生js实现新闻列表展开/收起全文功能
2017/01/20 Javascript
详解利用 Express 托管静态文件的方法
2017/09/18 Javascript
ES6中Set和Map数据结构,Map与其它数据结构互相转换操作实例详解
2019/02/28 Javascript
重学JS之显示强制类型转换详解
2019/06/30 Javascript
手把手15分钟搭一个企业级脚手架
2019/09/16 Javascript
python使用循环实现批量创建文件夹示例
2014/03/25 Python
Python简易版停车管理系统
2019/08/12 Python
pytorch 预训练层的使用方法
2019/08/20 Python
Python交互环境下打印和输入函数的实例内容
2020/02/16 Python
python 使用递归回溯完美解决八皇后的问题
2020/02/26 Python
利用python制作拼图小游戏的全过程
2020/12/04 Python
Python3.9.1中使用split()的处理方法(推荐)
2021/02/07 Python
Python3使用Selenium获取session和token方法详解
2021/02/16 Python
详解HTML5 录音的踩坑之旅
2017/12/26 HTML / CSS
美国购买和销售礼品卡平台:Raise
2017/01/13 全球购物
JD Sports法国:英国篮球和运动时尚的领导者
2017/09/28 全球购物
Structs界面控制层技术
2013/10/11 面试题
2014国庆节演讲稿:祖国在我心中(400字)
2014/09/25 职场文书
分享CSS盒子模型隐藏的几种方式
2022/02/28 HTML / CSS