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中用正则表达式清除字符串的空白
Jan 17 PHP
PHP的简易冒泡法代码分享
Aug 28 PHP
深入理解curl类,可用于模拟get,post和curl下载
Jun 08 PHP
PHP邮件群发机实现代码
Feb 16 PHP
php array_udiff_assoc 计算两个数组的差集实例
Nov 12 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
Nov 15 PHP
Yii框架数据模型的验证规则rules()被执行的方法
Dec 02 PHP
php 三大特点:封装,继承,多态
Feb 19 PHP
PHP获取远程http或ftp文件的md5值的方法
Apr 15 PHP
详解PHP Swoole与TCP三次握手
May 27 PHP
PHP设计模式(观察者模式)
Jul 07 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中处理模拟rewrite 效果
2006/12/09 PHP
支持中文和其他编码的php截取字符串函数分享(截取中文字符串)
2014/03/13 PHP
PHP递归删除目录几个代码实例
2014/04/21 PHP
php监测数据是否成功插入到Mysql数据库的方法
2016/11/25 PHP
Yii框架常见缓存应用实例小结
2019/09/09 PHP
tp5修改(实现即点即改)
2019/10/18 PHP
使用javascript实现监控视频播放并打印日志
2015/01/05 Javascript
javascript中return,return true,return false三者的用法及区别
2015/11/17 Javascript
Vue.js组件tree实现省市多级联动
2016/12/02 Javascript
bootstrap表格分页实例讲解
2016/12/30 Javascript
JavaScript 栈的详解及实例代码
2017/01/22 Javascript
bootstrap jquery dataTable 异步ajax刷新表格数据的实现方法
2017/02/10 Javascript
基于jQuery实现文字打印动态效果
2017/04/21 jQuery
详解在 Angular 项目中添加 clean-blog 模板
2017/07/04 Javascript
新手vue构建单页面应用实例代码
2017/09/18 Javascript
详解在React里使用&quot;Vuex&quot;
2018/04/02 Javascript
讲解vue-router之什么是动态路由
2018/05/28 Javascript
Vue动态组件与异步组件实例详解
2019/02/23 Javascript
常见的浏览器存储方式(cookie、localStorage、sessionStorage)
2019/05/07 Javascript
js判断浏览器的环境(pc端,移动端,还是微信浏览器)
2020/12/24 Javascript
Python实现网络端口转发和重定向的方法
2016/09/19 Python
python初学之用户登录的实现过程(实例讲解)
2017/12/23 Python
解决Python获取字典dict中不存在的值时出错问题
2018/10/17 Python
PyGame贪吃蛇的实现代码示例
2018/11/21 Python
python读取图片任意范围区域
2019/01/23 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
2019/09/11 Python
美国批发零售网站:GearXS
2016/07/26 全球购物
美国内衣第一品牌:Hanes(恒适)
2016/07/29 全球购物
英国奢华护肤、美容和Spa品牌:Temple Spa
2019/11/02 全球购物
JS原生实现轮播图的几种方法
2021/03/23 Javascript
员工考核管理制度
2014/02/02 职场文书
2014全国两会心得体会
2014/03/17 职场文书
故意杀人罪辩护词
2015/05/21 职场文书
队名及霸气口号大全
2015/12/25 职场文书
2019年房屋委托租赁合同范本(通用版)!
2019/07/17 职场文书
浅析NIO系列之TCP
2021/06/15 Java/Android