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 相关文章推荐
操作Oracle的php类
Oct 09 PHP
PHP实现定时生成HTML网站首页实例代码
Nov 20 PHP
php 仿Comsenz安装效果代码打包提供下载
May 09 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
Jun 03 PHP
php 模拟 asp.net webFrom 按钮提交事件的思路及代码
Dec 02 PHP
php遍历目录方法小结
Mar 10 PHP
PHP cURL初始化和执行方法入门级代码
May 28 PHP
使用XHGui来测试PHP性能的教程
Jul 03 PHP
详解PHP中的null合并运算符
Dec 30 PHP
php如何计算两坐标点之间的距离
Dec 29 PHP
laravel框架与其他框架的详细对比
Oct 23 PHP
PHP基于openssl实现非对称加密代码实例
Jun 19 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
浅析PKI加密解密 OpenSSL
2013/07/01 PHP
php实现无限级分类
2014/12/24 PHP
PHP计算近1年的所有月份
2017/03/13 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
javascript中运用闭包和自执行函数解决大量的全局变量问题
2010/12/30 Javascript
javascript模拟select,jselect的方法实现
2012/11/08 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
jQuery封装的屏幕居中提示信息代码
2016/06/08 Javascript
js实现日历的简单算法
2017/01/24 Javascript
JavaScript实现定时页面跳转功能示例
2017/02/14 Javascript
详解webpack 多页面/入口支持&amp;公共组件单独打包
2017/06/29 Javascript
vue实现全选和反选功能
2017/08/31 Javascript
react以create-react-app为基础创建项目
2018/03/14 Javascript
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
react配置antd按需加载的使用
2019/02/11 Javascript
[50:48]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
RC4文件加密的python实现方法
2015/06/30 Python
python实现的多线程端口扫描功能示例
2017/01/21 Python
Python 私有函数的实例详解
2017/09/11 Python
python中hashlib模块用法示例
2017/10/30 Python
python matplotlib画图实例代码分享
2017/12/27 Python
Python中staticmethod和classmethod的作用与区别
2018/10/11 Python
Python generator生成器和yield表达式详解
2019/08/08 Python
Python3实现将一维数组按标准长度分隔为二维数组
2019/11/29 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
2020/03/30 Python
python自动提取文本中的时间(包含中文日期)
2020/08/31 Python
CSS3制作翻转效果_动力节点Java学院整理
2017/07/11 HTML / CSS
北京某公司的.net笔试题
2014/03/20 面试题
2013年学期结束动员演讲稿
2014/01/07 职场文书
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
职业生涯规划书结束语
2014/04/15 职场文书
仓库管理计划书
2014/05/04 职场文书
个人承诺书格式
2014/06/03 职场文书
工作汇报开头与结尾怎么写
2014/11/08 职场文书
2015年法院工作总结范文
2015/04/28 职场文书
企业廉洁教育心得体会
2016/01/20 职场文书