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 静态变量的初始化
Nov 15 PHP
php表单转换textarea换行符的方法
Sep 10 PHP
解析isset与is_null的区别
Aug 09 PHP
PHP内存缓存Memcached类实例
Dec 08 PHP
PHP删除指定目录中的所有目录及文件的方法
Feb 26 PHP
php使用ob_flush不能每隔一秒输出原理分析
Jun 02 PHP
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
Nov 25 PHP
PHP对象链式操作实现原理分析
Oct 09 PHP
php的laravel框架快速集成微信登录的方法
Dec 12 PHP
详解PHP如何更好的利用PHPstorm的自动提示
Aug 18 PHP
用PHP做了一个领取优惠券活动的示例代码
Jul 05 PHP
thinkphp5框架实现数据库读取的数据转换成json格式示例
Oct 10 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的ASP防火墙
2006/10/09 PHP
php中使用Curl、socket、file_get_contents三种方法POST提交数据
2011/08/12 PHP
PHP缓存技术的多种方法小结
2012/08/14 PHP
php内嵌函数用法实例
2015/03/20 PHP
PHP新特性之字节码缓存和内置服务器
2017/08/11 PHP
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
javascript设计模式 接口介绍
2012/07/24 Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
2015/03/05 Javascript
详解javascript实现瀑布流绝对式布局
2016/01/29 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
2016/05/16 Javascript
JQuery Ajax执行跨域请求数据的解决方案
2018/12/10 jQuery
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
JS操作字符串转数字的常见方法示例
2019/10/29 Javascript
TypeScript高级用法的知识点汇总
2019/12/17 Javascript
js canvas实现五子棋小游戏
2021/01/22 Javascript
python实现探测socket和web服务示例
2014/03/28 Python
简化Python的Django框架代码的一些示例
2015/04/20 Python
python requests 使用快速入门
2017/08/31 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
2019/03/27 Python
Python pandas用法最全整理
2019/08/04 Python
Tensorflow实现多GPU并行方式
2020/02/03 Python
python zip,lambda,map函数代码实例
2020/04/04 Python
借助HTML5 Canvas API制作一个简单的猜字游戏
2016/03/25 HTML / CSS
美国猫狗药物和用品网站:PetCareRx
2017/01/05 全球购物
联强国际笔试题面试题
2013/07/10 面试题
工商技校毕业生自荐信
2013/11/15 职场文书
高中生操行评语大全
2014/04/25 职场文书
社会调查研究计划书
2014/05/01 职场文书
关于诚信的活动方案
2014/08/18 职场文书
公安局副政委班子个人对照检查材料
2014/10/04 职场文书
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
2015年幼儿园元旦亲子活动方案
2014/12/09 职场文书
2014小学语文教学工作总结
2014/12/17 职场文书
2015年学校保卫部工作总结
2015/05/11 职场文书
环境卫生标语
2015/08/03 职场文书
Vue实现下拉加载更多
2021/05/09 Vue.js