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函数篇之掌握ord()与chr()函数应用
Dec 05 PHP
用PHP+MySQL搭建聊天室功能实例代码
Aug 20 PHP
php jq jquery getJSON跨域提交数据完整版
Sep 13 PHP
php生成不重复随机数、数组的4种方法分享
Mar 30 PHP
PHP模拟asp.net的StringBuilder类实现方法
Aug 08 PHP
刷新PHP缓冲区为你的站点加速
Oct 10 PHP
php实现zip文件解压操作
Nov 03 PHP
微信开发之网页授权获取用户信息(二)
Jan 08 PHP
php实现基于pdo的事务处理方法示例
Jul 21 PHP
详解PHP发送邮件知识点
May 06 PHP
Laravel第三方包报class not found的解决方法
Oct 13 PHP
Laravel监听数据库访问,打印SQL的例子
Oct 24 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/15 PHP
php获得刚插入数据的id 的几种方法总结
2018/05/31 PHP
js中top的作用深入剖析
2014/03/04 Javascript
Javascript实现图片轮播效果(二)图片序列节点的控制实现
2016/02/17 Javascript
全面解析Bootstrap中tooltip、popover的使用方法
2016/06/13 Javascript
weUI应用之JS常用信息提示弹层的封装
2016/11/21 Javascript
如何从零开始利用js手写一个Promise库详解
2018/04/19 Javascript
elementUI中Table表格问题的解决方法
2018/12/04 Javascript
Jquery获取radio选中值实例总结
2019/01/17 jQuery
详解微信小程序支付流程与梳理
2019/07/16 Javascript
vue实现列表滚动的过渡动画
2020/06/29 Javascript
[01:16:01]VGJ.S vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
python爬取网站数据保存使用的方法
2013/11/20 Python
python生成器generator用法实例分析
2015/06/04 Python
Python中取整的几种方法小结
2017/01/06 Python
python通过socket实现多个连接并实现ssh功能详解
2017/11/08 Python
python用fsolve、leastsq对非线性方程组求解
2018/12/15 Python
Django REST framework 视图和路由详解
2019/07/19 Python
python实现大文件分割与合并
2019/07/22 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
2020/01/08 Python
PyQt使用QPropertyAnimation开发简单动画
2020/04/02 Python
Jupyter Notebook输出矢量图实例
2020/04/14 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
2021/01/28 Python
CSS3 Columns分列式布局方法简介
2014/05/03 HTML / CSS
英国最大的奢侈品零售网络商城:Flannels
2016/09/16 全球购物
土木工程专业个人求职信
2013/12/05 职场文书
学生思想表现的评语
2014/01/30 职场文书
采购助理岗位职责
2014/02/16 职场文书
销售助理岗位职责
2014/02/21 职场文书
《故都的秋》教学反思
2014/04/15 职场文书
大班亲子运动会方案
2014/06/10 职场文书
维护民族团结演讲稿
2014/08/27 职场文书
2014年重阳节敬老活动方案
2014/09/16 职场文书
个人总结与自我评价
2015/02/14 职场文书
redis限流的实际应用
2021/04/24 Redis
MySQL串行化隔离级别(间隙锁实现)
2022/06/16 MySQL