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 相关文章推荐
怎么使 Mysql 数据同步
Oct 09 PHP
3.从实例开始
Oct 09 PHP
php 获取当前访问的url文件名的方法小结
Feb 08 PHP
PHP获取文件后缀名的三个函数
Oct 15 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
Aug 19 PHP
PHP+Apache+Mysql环境搭建教程
Aug 01 PHP
php+mysql+jquery实现日历签到功能
Feb 27 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
Jun 30 PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
Oct 31 PHP
smarty模板的使用方法实例分析
Sep 18 PHP
PHP的cookie与session原理及用法详解
Sep 27 PHP
php实现分页功能的详细实例方法
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下图片文字混合水印与缩略图实现代码
2009/12/11 PHP
php发送post请求函数分享
2014/03/06 PHP
php实现保存submit内容之后禁止刷新
2014/03/19 PHP
php+mysqli实现批量替换数据库表前缀的方法
2014/12/29 PHP
一个简单的php MVC留言本实例代码(必看篇)
2016/09/22 PHP
php is_writable判断文件是否可写实例代码
2016/10/13 PHP
php读取和保存base64编码的图片内容
2017/04/22 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
2019/03/29 PHP
JavaScript 三种创建对象的方法
2009/10/16 Javascript
基于jquery 的一个progressbar widge
2010/10/29 Javascript
js中格式化日期时间型数据函数代码
2010/11/08 Javascript
简单漂亮的js弹窗可自由拖拽且兼容大部分浏览器
2013/10/22 Javascript
JS获得浏览器版本和操作系统版本的例子
2014/05/13 Javascript
Javascript与jQuery方法的隐藏与显示
2015/01/19 Javascript
基于jQuery实现交互体验社会化分享代码附源码下载
2016/01/04 Javascript
javascript基本算法汇总
2016/03/09 Javascript
jQuery获取单击节点对象的方法
2016/06/02 Javascript
对jQuary选择器的全面总结
2016/06/20 Javascript
D3.js实现折线图的方法详解
2016/09/21 Javascript
详解VUE 定义全局变量的几种实现方式
2017/06/01 Javascript
详解angularjs的数组传参方式的简单实现
2017/07/28 Javascript
浅谈在koa2中实现页面渲染的全局数据
2017/10/09 Javascript
vue中实现methods一个方法调用另外一个方法
2018/02/08 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
2019/09/11 Javascript
Vue的生命周期操作示例
2019/09/17 Javascript
layui字体图标 loading图标静止不旋转的解决方法
2019/09/23 Javascript
用Python给文本创立向量空间模型的教程
2015/04/23 Python
python中解析json格式文件的方法示例
2017/05/03 Python
Python实现的批量修改文件后缀名操作示例
2018/12/07 Python
Python 判断奇数偶数的方法
2018/12/20 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
北美最大的手工艺品零售商之一:Michaels Stores
2019/02/27 全球购物
迪卡侬波兰体育用品商店:Decathlon波兰
2020/03/31 全球购物
服务员自我评价
2014/01/25 职场文书
2015年音乐教师个人工作总结
2015/05/20 职场文书
MySQL 时间类型的选择
2021/06/05 MySQL