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最常用的ini函数分析 针对PHP.ini配置文件
Apr 22 PHP
PHP 获取远程网页内容的代码(fopen,curl已测)
Jun 06 PHP
采用PHP函数memory_get_usage获取PHP内存清耗量的方法
Dec 06 PHP
PHP 第一节 php简介
Apr 28 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
Jun 14 PHP
PHP中array_map与array_column之间的关系分析
Aug 19 PHP
php中strstr、strrchr、substr、stristr四个函数的区别总结
Sep 22 PHP
php实现MySQL数据库备份与还原类实例
Dec 09 PHP
php使用wordwrap格式化文本段落的方法
Mar 17 PHP
php实现通用的信用卡验证类
Mar 24 PHP
PHP内存使用情况如何获取
Oct 10 PHP
Laravel框架Auth用户认证操作实例分析
Sep 29 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处理斐波那契数列非递归方法
2012/02/04 PHP
JS实现浏览器菜单命令
2006/09/05 Javascript
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
ext for eclipse插件安装方法
2008/04/27 Javascript
JS时间选择器 兼容IE6,7,8,9
2012/06/26 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
jquery序列化表单去除指定元素示例代码
2014/04/10 Javascript
AngularJS入门教程(零):引导程序
2014/12/06 Javascript
AngularJS基础学习笔记之简单介绍
2015/05/10 Javascript
移动端翻页插件dropload.js(支持Zepto和jQuery)
2016/07/27 Javascript
jQuery插件EasyUI设置datagrid的checkbox为禁用状态的方法
2016/08/05 Javascript
AngularJS实现根据变量改变动态加载模板的方法
2016/11/04 Javascript
详解前端构建工具gulpjs的使用介绍及技巧
2017/01/19 Javascript
jQuery中 bind的用法简单介绍
2017/02/13 Javascript
jQuery实现Table表格隔行变色及高亮显示当前选择行效果示例
2017/02/14 Javascript
js和jquery中获取非行间样式
2017/05/05 jQuery
JavaScript对象_动力节点Java学院整理
2017/06/23 Javascript
jQuery实现QQ空间汉字转拼音功能示例
2017/07/10 jQuery
JS和jQuery通过this获取html标签中的属性值(实例代码)
2017/09/11 jQuery
React Native 搭建开发环境的方法步骤
2017/10/30 Javascript
使用layer弹窗和layui表单实现新增功能
2018/08/09 Javascript
解决node-sass偶尔安装失败的方法小结
2018/12/05 Javascript
Vue函数式组件-你值得拥有
2019/05/09 Javascript
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
python sort、sorted高级排序技巧
2014/11/21 Python
在Python的Django框架中创建和使用模版
2015/07/15 Python
python 中的list和array的不同之处及转换问题
2018/03/13 Python
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
Python爬虫:将headers请求头字符串转为字典的方法
2019/08/21 Python
Kmeans均值聚类算法原理以及Python如何实现
2020/09/26 Python
python 合并多个excel中同名的sheet
2021/01/22 Python
研究生自荐信
2013/10/09 职场文书
计算机个人求职信范例
2014/01/24 职场文书
小学中秋节活动方案
2014/02/06 职场文书
教师党员公开承诺书
2014/03/25 职场文书
农林经济管理专业自荐信
2014/09/01 职场文书