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 相关文章推荐
一个ftp类(ini.php)
Oct 09 PHP
xml+php动态载入与分页
Oct 09 PHP
一个PHP的QRcode类与大家分享
Nov 13 PHP
PHP图片验证码制作实现分享(全)
May 10 PHP
php 根据url自动生成缩略图并处理高并发问题
Jan 23 PHP
从零开始学YII2框架(六)高级应用程序模板
Aug 20 PHP
跟我学Laravel之请求(Request)的生命周期
Oct 15 PHP
PHP中基本HTTP认证技巧分析
Mar 16 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
Mar 21 PHP
PHP与SQL语句常用大全
Dec 10 PHP
PHP实现动态添加XML中数据的方法
Mar 30 PHP
php DES加密算法实例分析
Sep 18 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验证码类分享
2014/11/18 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
PHP实现多关键字加亮功能
2016/10/21 PHP
微信公众号实现会员卡领取功能
2017/06/08 PHP
javascript oop开发滑动(slide)菜单控件
2010/08/25 Javascript
JavaScript怎么判断图片是否加载完成以便获取其尺寸
2014/05/08 Javascript
深入理解javascript原型链和继承
2014/09/23 Javascript
自定义刻度jQuery进度条及插件
2015/09/02 Javascript
js实现文字闪烁特效的方法
2015/12/17 Javascript
js获取url传值的方法
2015/12/18 Javascript
浅谈javascript中执行环境(作用域)与作用域链
2016/12/08 Javascript
BootstrapTable refresh 方法使用实例简单介绍
2017/02/20 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
2017/07/10 Javascript
angular.js实现购物车功能
2017/10/23 Javascript
vue实现局部刷新的实现示例
2019/04/16 Javascript
layui use 定义js外部引用函数的方法
2019/09/26 Javascript
微信小程序 下拉刷新及上拉加载原理解析
2019/11/06 Javascript
JavaScript中reduce()的5个基本用法示例
2020/07/19 Javascript
antd配置config-overrides.js文件的操作
2020/10/31 Javascript
Python多线程编程(五):死锁的形成
2015/04/05 Python
python获得一个月有多少天的方法
2015/06/04 Python
win7下python3.6安装配置方法图文教程
2018/07/31 Python
python机器学习之神经网络实现
2018/10/13 Python
利用Python求阴影部分的面积实例代码
2018/12/05 Python
Python3 字典dictionary入门基础附实例
2020/02/10 Python
python3注册全局热键的实现
2020/03/22 Python
HTML5 history新特性pushState、replaceState及两者的区别
2015/12/26 HTML / CSS
全球销量第一生发产品:Viviscal
2017/12/21 全球购物
机电一体化专业应届本科生求职信
2013/09/27 职场文书
自我鉴定思想方面
2013/10/07 职场文书
售后主管岗位职责
2013/12/08 职场文书
企业安全生产演讲稿
2014/05/09 职场文书
安全标语口号
2014/06/09 职场文书
活动总结结尾怎么写
2014/08/30 职场文书
怎样写好演讲稿题目?
2019/08/21 职场文书
动画电影《擅长捉弄人的高木同学》6月10日上映!
2022/03/20 日漫