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 相关文章推荐
一个很方便的 XML 类!!原创的噢
Oct 09 PHP
PHP与SQL注入攻击[三]
Apr 17 PHP
PHP中文件上传的一个问题
Sep 04 PHP
php中3种方法删除字符串中间的空格
Mar 10 PHP
PHP图片等比缩放类SimpleImage使用方法和使用实例分享
Apr 10 PHP
将二维数组转为一维数组的2种方法
May 26 PHP
让codeigniter与swfupload整合的最佳解决方案
Jun 12 PHP
PHP的Yii框架中Model模型的学习教程
Mar 29 PHP
PHP中子类重载父类的方法【parent::方法名】
May 06 PHP
php获取flash尺寸详细数据的方法
Nov 12 PHP
详解php中的implements 使用
Jun 13 PHP
PHP safe_mode开启对于PHP系统函数有什么影响
Nov 10 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
PHP5中Cookie与 Session使用详解
2013/04/30 PHP
ThinkPHP3.1的Widget新用法
2014/06/19 PHP
php json_encode()函数返回json数据实例代码
2014/10/10 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
2016/09/22 PHP
详解yii2实现分库分表的方案与思路
2017/02/03 PHP
详解php命令注入攻击
2019/04/06 PHP
把html页面的部分内容保存成新的html文件的jquery代码
2009/11/12 Javascript
(function($){...})(jQuery)的意思
2010/07/22 Javascript
jQuery中绑定事件的命名空间详解
2011/04/05 Javascript
JS动态获取当前时间,并写到特定的区域
2013/05/03 Javascript
初步认识JavaScript函数库jQuery
2015/06/18 Javascript
JQuery实现Ajax加载图片的方法
2015/12/24 Javascript
jqueryMobile使用示例分享
2016/01/12 Javascript
AngularJS删除路由中的#符号的方法
2016/09/20 Javascript
微信小程序 图片边框解决方法
2017/01/16 Javascript
js Canvas绘制圆形时钟教程
2017/02/06 Javascript
js实现音频控制进度条功能
2017/04/01 Javascript
JS获取数组中出现次数最多及第二多元素的方法
2017/10/27 Javascript
jQuery实现表格的增、删、改操作示例
2019/01/27 jQuery
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
[56:17]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
python快速排序代码实例
2013/11/21 Python
python实现读取命令行参数的方法
2015/05/22 Python
对Python 内建函数和保留字详解
2018/10/15 Python
Python3中exp()函数用法分析
2019/02/19 Python
Flask框架学习笔记之模板操作实例详解
2019/08/15 Python
使用npy转image图像并保存的实例
2020/07/01 Python
单位实习证明怎么写
2014/01/17 职场文书
采购部经理岗位职责
2014/02/10 职场文书
课堂教学改革实施方案
2014/03/17 职场文书
干部作风整顿自我剖析材料和整改措施
2014/09/18 职场文书
企业领导班子四风对照检查材料
2014/09/27 职场文书
《画家和牧童》教学反思
2016/02/17 职场文书
浅谈Python 中的复数问题
2021/05/19 Python
Python爬虫之自动爬取某车之家各车销售数据
2021/06/02 Python
四十九个javascript小知识实用技巧
2021/11/20 Javascript