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分页程序,挺实用的.
Oct 09 PHP
BBS(php &amp; mysql)完整版(四)
Oct 09 PHP
文件系统基本操作类
Nov 23 PHP
phpfans留言版用到的数据操作类和分页类
Jan 04 PHP
PHP fopen 读取带中文URL地址的一点见解
Sep 25 PHP
php图像处理函数大全(推荐收藏)
Jul 11 PHP
PHP APC配置文件2套和参数详解
Jun 11 PHP
PHP临时文件的安全性分析
Jul 04 PHP
php实现无限级分类
Dec 24 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
Feb 03 PHP
PHP中判断文件存在使用is_file还是file_exists?
Apr 03 PHP
Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
May 08 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生成SessionID和图片校验码的思路和实现代码
2009/03/10 PHP
php 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
2010/06/03 PHP
PHP错误抑制符(@)导致引用传参失败Bug的分析
2011/05/02 PHP
深入PHP获取随机数字和字母的方法详解
2013/06/06 PHP
php跨站攻击实例分析
2014/10/28 PHP
解决PHP上传非标准格式的图片pjpeg失败的方法
2017/03/12 PHP
JavaScript 的方法重载效果
2009/08/07 Javascript
JavaScript写的一个DIV 弹出网页对话框
2009/08/14 Javascript
javaScript同意等待代码实现心得
2011/01/01 Javascript
容易被忽略的JS脚本特性
2011/09/13 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
js中widow.open()方法使用详解
2013/07/30 Javascript
jQuery 借助插件Lavalamp实现导航条动态美化效果
2013/09/27 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
2015/11/25 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
2016/04/05 Javascript
jquery删除table当前行的实例代码
2016/10/07 Javascript
Bootstrap基本样式学习笔记之按钮(4)
2016/12/07 Javascript
JS判断一个数是否是水仙花数
2017/06/11 Javascript
薪资那么高的Web前端必看书单
2017/10/13 Javascript
vue-cli3+typescript初体验小结
2019/02/28 Javascript
js prototype深入理解及应用实例分析
2019/11/25 Javascript
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
2017/07/11 Python
浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
2019/03/11 Python
python+openCV利用摄像头实现人员活动检测
2019/06/22 Python
简单了解django orm中介模型
2019/07/30 Python
Python如何使用input函数获取输入
2020/08/06 Python
利用python 读写csv文件
2020/09/10 Python
伦敦一卡通:The London Pass
2018/11/30 全球购物
be2台湾单身男女交友:全球网路婚姻介绍的领导品牌
2019/10/11 全球购物
软件测试题目
2013/02/27 面试题
外贸会计专业自荐信
2014/06/22 职场文书
高中生国庆节演讲稿范文2014
2014/09/21 职场文书
2015年“7.11”世界人口日宣传活动方案
2015/05/06 职场文书
python神经网络编程之手写数字识别
2021/05/08 Python
如何利用Matlab制作一款真正的拼图小游戏
2021/05/11 Python
Hive常用日期格式转换语法
2022/06/25 数据库