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预定义常量
Dec 25 PHP
PHP array_push 数组函数
Dec 26 PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
Sep 10 PHP
自定义session存储机制避免会话保持问题
Oct 08 PHP
php实现图片添加描边字和马赛克的方法
Dec 10 PHP
php结合ajax实现手机发红包的案例
Oct 13 PHP
ThinkPHP下表单令牌错误与解决方法分析
May 20 PHP
php面向对象的用户登录身份验证
Jun 08 PHP
Laravel实现定时任务的示例代码
Aug 10 PHP
thinkPHP框架中执行原生SQL语句的方法
Oct 25 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
Aug 21 PHP
PHP getDocNamespaces()函数讲解
Feb 03 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中功能强大却很少使用的函数实例小结
2016/11/10 PHP
PHP实现根据数组某个键值大小进行排序的方法
2018/03/13 PHP
在网页里看flash的trace数据的js类
2009/01/10 Javascript
setInterval,setTimeout与jquery混用的问题
2013/04/08 Javascript
基于js实现投票的实例代码
2015/08/04 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
angular双向绑定模拟探索
2016/12/26 Javascript
基于JS实现二维码图片固定在右下角某处并跟随滚动条滚动
2017/02/08 Javascript
Angular中的interceptors拦截器
2017/06/25 Javascript
JS库 Highlightjs 添加代码行号的实现代码
2017/09/13 Javascript
浅谈gulp创建完整的项目流程
2017/12/20 Javascript
Angular-UI Bootstrap组件实现警报功能
2018/07/16 Javascript
echarts设置图例颜色和地图底色的方法实例
2018/08/01 Javascript
详解webpack引入第三方库的方式以及注意事项
2019/01/15 Javascript
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
2019/04/30 Javascript
jquery实现购物车基本功能
2019/10/25 jQuery
如何基于js判断浏览器版本
2020/02/20 Javascript
JS一次前端面试经历记录
2020/03/19 Javascript
vue项目实现设置根据路由高亮对应的菜单项操作
2020/08/06 Javascript
vue解决跨域问题(推荐)
2020/11/10 Javascript
Python中解析JSON并同时进行自定义编码处理实例
2015/02/08 Python
在Django的URLconf中进行函数导入的方法
2015/07/18 Python
Python面向对象程序设计示例小结
2019/01/30 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
python2和python3实现在图片上加汉字的方法
2019/08/22 Python
python 监控服务器是否有人远程登录(详细思路+代码)
2020/12/18 Python
HTML5之SVG 2D入门12—SVG DOM及DOM操作介绍
2013/01/30 HTML / CSS
canvas 阴影和图形变换的示例代码
2018/01/02 HTML / CSS
Rakuten Kobo台湾:电子书、eReaders和Reading应用程式
2017/11/24 全球购物
毕业生多媒体设计求职信
2013/10/12 职场文书
股东协议书范本
2014/04/14 职场文书
安全宣传标语口号
2014/06/06 职场文书
建筑节能汇报材料
2014/08/22 职场文书
典型事迹材料范文
2014/12/29 职场文书
检讨书大全
2015/01/27 职场文书
PyQt5结合QtDesigner实现文本框读写操作
2021/06/11 Python