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 相关文章推荐
ip签名探针
Oct 09 PHP
php小技巧 把数组的键和值交换形成了新的数组,查找值取得键
Jun 02 PHP
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
Jun 17 PHP
具有时效性的php加密解密函数代码
Jun 19 PHP
PHP队列用法实例
Nov 05 PHP
Laravel 5 学习笔记
Mar 06 PHP
PHP日期函数date格式化UNIX时间的方法
Mar 19 PHP
浅谈PHP中静态方法和非静态方法的相互调用
Oct 04 PHP
PHP实现判断数组是一维、二维或几维的方法
Feb 06 PHP
PHP PDO数据库操作预处理与注意事项
Mar 16 PHP
php的instanceof和判断闭包Closure操作示例
Jan 26 PHP
如何用PHP websocket实现网页实时聊天
May 26 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
解析CI的AJAX分页 另类实现方法
2013/06/27 PHP
PHP中判断变量为空的几种方法分享
2013/08/26 PHP
php集成开发环境详解
2019/09/24 PHP
Jquery实现无刷新DropDownList联动实现代码
2010/03/08 Javascript
javascript 文章截取部分无损html显示实现代码
2010/05/04 Javascript
让人期待的2011年度最佳 jQuery 插件分享
2012/03/16 Javascript
jquery实现简单的无缝滚动
2015/04/15 Javascript
基于jQuery实现的QQ表情插件
2015/08/25 Javascript
简单实现限制uploadify上传个数
2015/11/16 Javascript
分享经典的JavaScript开发技巧
2015/11/21 Javascript
JQuery和PHP结合实现动态进度条上传显示
2016/11/23 Javascript
jQuery实现发送验证码并60秒倒计时功能
2016/11/25 Javascript
详解Angular的双向数据绑定(MV-VM)
2016/12/26 Javascript
AngularJS实现的回到顶部指令功能实例
2017/05/17 Javascript
jQuery实现web页面樱花坠落的特效
2017/06/01 jQuery
ES6中Class类的静态方法实例小结
2017/10/28 Javascript
微信小程序实现animation动画
2018/01/26 Javascript
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
2018/05/29 Javascript
解决element ui select下拉框不回显数据问题的解决
2019/02/20 Javascript
JS实现移动端在线签协议功能
2019/08/22 Javascript
js实现无限瀑布流实例方法
2019/09/16 Javascript
javascript实现点亮灯泡特效示例
2019/10/15 Javascript
vuex state中的数组变化监听实例
2019/11/06 Javascript
Sublime Text3 配置 NodeJs 环境的方法
2020/05/20 NodeJs
Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
2014/06/04 Python
python使用xpath中遇到:到底是什么?
2018/01/04 Python
使用python切片实现二维数组复制示例
2019/11/26 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
python 爬取古诗文存入mysql数据库的方法
2020/01/08 Python
Python爬虫实现模拟点击动态页面
2020/03/05 Python
WatchShop法国:英国排名第一的独立手表零售商
2020/02/17 全球购物
乐高瑞士官方商店:LEGO CH
2020/08/16 全球购物
三维科技面试题
2013/07/27 面试题
幼儿园辞职信范文
2015/02/27 职场文书
MySQL复制问题的三个参数分析
2021/04/07 MySQL
Apache SkyWalking 监控 MySQL Server 实战解析
2022/09/23 Servers