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
在Windows系统上安装PHP运行环境文字教程
Jul 19 PHP
php中将地址生成迅雷快车旋风链接的代码[测试通过]
Apr 20 PHP
php 阴历-农历-转换类代码
Jan 16 PHP
php中将数组转成字符串并保存到数据库中的函数代码
Sep 29 PHP
PHP面向对象之旅:深入理解static变量与方法
Jan 06 PHP
php中将一段数据存到一个txt文件中并显示其内容
Aug 15 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
Nov 10 PHP
php支持断点续传、分块下载的类
May 02 PHP
PHP简单实现二维数组的矩阵转置操作示例
Nov 24 PHP
基于laravel-admin 后台 列表标签背景的使用方法
Oct 03 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 27 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
全国FM电台频率大全 - 30 宁夏回族自治区
2020/03/11 无线电
PHP获得用户使用的代理服务器ip即真实ip
2006/12/31 PHP
Sorting Array Values in PHP(数组排序)
2011/09/15 PHP
php 备份数据库代码(生成word,excel,json,xml,sql)
2013/06/23 PHP
php实现文件下载(支持中文文名)
2013/12/04 PHP
一个经典的PHP验证码类分享
2014/11/18 PHP
PHP 配置后台登录以及模板引入
2017/01/24 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
PHP的mysqli_rollback()函数讲解
2019/01/23 PHP
php实现登录页面的简单实例
2019/09/29 PHP
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
Node.js的包详细介绍
2015/01/14 Javascript
使用纯javascript实现放大镜效果
2015/03/18 Javascript
Javascript 普通函数和构造函数的区别
2016/11/05 Javascript
vue小图标favicon不显示的解决方案
2017/09/19 Javascript
p5.js入门教程之图片加载
2018/03/20 Javascript
vue select选择框数据变化监听方法
2018/08/24 Javascript
JS+html5实现异步上传图片显示上传文件进度条功能示例
2019/11/09 Javascript
实现一个Vue自定义指令懒加载的方法示例
2020/06/04 Javascript
构建一个JavaScript插件系统
2020/10/20 Javascript
[01:00:13]完美世界DOTA2联赛 LBZS vs Forest 第一场 11.07
2020/11/09 DOTA
python中的内置函数max()和min()及mas()函数的高级用法
2018/03/29 Python
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
python 使用递归回溯完美解决八皇后的问题
2020/02/26 Python
Python导入模块包原理及相关注意事项
2020/03/25 Python
Tensorflow使用Anaconda、pycharm安装记录
2020/07/29 Python
html5 canvas绘制放射性渐变色效果
2018/01/04 HTML / CSS
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/11/24 面试题
怎样自定义一个异常类
2016/09/27 面试题
机械专业应届生求职信
2013/09/21 职场文书
动物科学专业毕业生的自我评价
2013/11/29 职场文书
制衣厂各岗位职责
2013/12/02 职场文书
校园元旦活动总结
2014/07/09 职场文书
学生自我评语
2015/01/04 职场文书
对公司的意见和建议
2015/06/04 职场文书
js中Map和Set的用法及区别实例详解
2022/02/15 Javascript