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 相关文章推荐
图象函数中的中文显示
Oct 09 PHP
也谈 PHP 和 MYSQL
Oct 09 PHP
用PHP实现的生成静态HTML速度快类库
Mar 31 PHP
基于asp+ajax和数据库驱动的二级联动菜单
May 06 PHP
php操作excel文件 基于phpexcel
Jul 02 PHP
php的memcache类分享(memcache队列)
Mar 26 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
Jun 12 PHP
destoon实现VIP排名一直在前面排序的方法
Aug 21 PHP
PHP动态页生成静态页的3种常用方法
Nov 13 PHP
PHPExcel内存泄漏问题解决方法
Jan 23 PHP
php+html5+ajax实现上传图片的方法
May 14 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
Jul 24 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
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
php+ajax实现无刷新的新闻留言系统
2020/12/21 PHP
php上传图片并压缩的实现方法
2015/12/22 PHP
php解决DOM乱码的方法示例代码
2016/11/20 PHP
PHP实现支持CURL字符串证书传输的方法
2019/03/23 PHP
javascript for循环从入门到偏门(效率优化+奇特用法)
2012/08/01 Javascript
IE与FF下javascript获取网页及窗口大小的区别详解
2014/01/14 Javascript
JavaScript调试技巧之console.log()详解
2014/03/19 Javascript
详谈JavaScript内存泄漏
2014/11/14 Javascript
JavaScript实现Iterator模式实例分析
2015/06/09 Javascript
Javascript常用小技巧汇总
2015/06/24 Javascript
深入理解JavaScript 函数
2016/06/06 Javascript
js判断手机号是否正确并返回的实现代码
2017/01/17 Javascript
jQuery学习之DOM节点的插入方法总结
2017/01/22 Javascript
浅析vue中的MVVM实现原理
2019/03/04 Javascript
Vue数字输入框组件示例代码详解
2020/01/15 Javascript
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
python实现m3u8格式转换为mp4视频格式
2018/02/28 Python
python批量读取txt文件为DataFrame的方法
2018/04/03 Python
Python lxml解析HTML并用xpath获取元素的方法
2019/01/02 Python
对python PLT中的image和skimage处理图片方法详解
2019/01/10 Python
Python3实现的简单工资管理系统示例
2019/03/12 Python
使用Python计算玩彩票赢钱概率
2019/06/26 Python
python Elasticsearch索引建立和数据的上传详解
2019/08/04 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
2019/08/07 Python
python应用Axes3D绘图(批量梯度下降算法)
2020/03/25 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
scrapy头部修改的方法详解
2020/12/06 Python
真正了解CSS3背景下的@font face规则
2017/05/04 HTML / CSS
Roxy俄罗斯官方网站:冲浪和滑雪板的一切
2020/06/20 全球购物
公司晚会策划方案
2014/05/17 职场文书
2014学习优秀共产党员先进事迹思想汇报
2014/09/14 职场文书
纪念九一八事变演讲稿1000字
2014/09/14 职场文书
2014年汽车销售工作总结
2014/12/01 职场文书
寒假生活随笔
2015/08/15 职场文书
用 Python 元类的特性实现 ORM 框架
2021/05/19 Python