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的urlencode()URL编码函数浅析
Aug 09 PHP
Trying to clone an uncloneable object of class Imagic的解决方法
Jan 11 PHP
关于UEditor编辑器远程图片上传失败的解决办法
Aug 31 PHP
PHP独立Session数据库存储操作类分享
Jun 11 PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
Jun 27 PHP
php随机生成数字字母组合的方法
Mar 18 PHP
php中mysql操作buffer用法详解
Mar 19 PHP
7个鲜为人知却非常实用的PHP函数
Jul 01 PHP
apache php mysql开发环境安装教程
Jul 28 PHP
PHP中new static()与new self()的比较
Aug 19 PHP
PHP高效获取远程图片尺寸和大小的实现方法
Oct 20 PHP
workerman结合laravel开发在线聊天应用的示例代码
Oct 30 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
wordpress之wp-settings.php
2007/08/17 PHP
使用zend studio for eclipse不能激活代码提示功能的解决办法
2009/10/11 PHP
PHP面向对象学习笔记之一 基础概念
2012/10/06 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
Yii 使用intervention/image拓展实现图像处理功能
2019/06/22 PHP
jQuery中filter(),not(),split()使用方法
2010/07/06 Javascript
跟我学Node.js(四)---Node.js的模块载入方式与机制
2014/06/04 Javascript
JavaScript数据结构和算法之图和图算法
2015/02/11 Javascript
浅谈jQuery绑定事件会叠加的解决方法和心得总结
2016/10/26 Javascript
基于Nodejs利用socket.io实现多人聊天室
2017/02/22 NodeJs
基于Bootstrap漂亮简洁的CSS3价格表(附源码下载)
2017/02/28 Javascript
JavaScript校验Number(4,1)格式的数字实例代码
2017/03/13 Javascript
Bootstrap实现各种进度条样式详解
2017/04/13 Javascript
vue 2.0路由之路由嵌套示例详解
2017/05/08 Javascript
JavaScript中利用Array filter() 方法压缩稀疏数组
2018/02/24 Javascript
打通前后端构建一个Vue+Express的开发环境
2018/07/17 Javascript
详解ng-alain动态表单SF表单项设置必填和正则校验
2019/06/11 Javascript
javascript中的相等操作符(==与===区别)
2019/12/21 Javascript
js将URL网址转为16进制加密与解密函数
2020/03/04 Javascript
Flask框架的学习指南之用户登录管理
2016/11/20 Python
火车票抢票python代码公开揭秘!
2018/03/08 Python
Pandas实现数据类型转换的一些小技巧汇总
2018/05/07 Python
Pandas删除数据的几种情况(小结)
2019/06/21 Python
python装饰器相当于函数的调用方式
2019/12/27 Python
pytorch 求网络模型参数实例
2019/12/30 Python
基于python求两个列表的并集.交集.差集
2020/02/10 Python
python实现信号时域统计特征提取代码
2020/02/26 Python
python中JWT用户认证的实现
2020/05/18 Python
Python Http请求json解析库用法解析
2020/11/28 Python
python 监控服务器是否有人远程登录(详细思路+代码)
2020/12/18 Python
HTML实现代码雨源码及效果示例
2020/02/25 HTML / CSS
社会公德演讲稿
2014/05/20 职场文书
2014收银员工作总结范文
2014/12/16 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
TensorFlow中tf.batch_matmul()的用法
2021/06/02 Python
Python实现查询剪贴板自动匹配信息的思路详解
2021/07/09 Python