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利用COM对象访问SQLServer、Access
Oct 09 PHP
dedecms中常见问题修改方法总结
Mar 21 PHP
php读取mysql中文数据出现乱码的解决方法
Aug 16 PHP
yii操作cookie实例简介
Jul 09 PHP
php生成图片缩略图的方法
Apr 07 PHP
php实现批量修改文件名称的方法
Jul 23 PHP
Yii2选项卡的简单使用
May 26 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
Jun 19 PHP
Laravel中的Blade模板引擎示例详解
Oct 10 PHP
ecshop添加菜单及权限分配问题
Nov 21 PHP
php 读写json文件及修改json的方法
Mar 07 PHP
PHP创建自己的Composer包方法
Apr 09 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
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
PHP教程 基本语法
2009/10/23 PHP
在VS2008中编译MYSQL5.1.48的方法
2010/07/03 PHP
php fsockopen中多线程问题的解决办法[翻译]
2011/11/09 PHP
PHP对象克隆clone用法示例
2016/09/28 PHP
javascript Excel操作知识点
2009/04/24 Javascript
js弹出层(jQuery插件形式附带reLoad功能)
2013/04/12 Javascript
node.js WEB开发中图片验证码的实现方法
2014/06/03 Javascript
在JavaScript中访问字符串的子串
2015/07/07 Javascript
jquery模拟进度条实现方法
2015/08/03 Javascript
javascript实现动态统计图开发实例
2015/11/21 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
2016/02/25 Javascript
JS组件Bootstrap实现图片轮播效果
2016/05/16 Javascript
jQuery实现查找链接文字替换属性的方法
2016/06/27 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
2017/06/16 Javascript
React Native之prop-types进行属性确认详解
2017/12/19 Javascript
Vue 实现从小到大的横向滑动效果详解
2019/10/16 Javascript
详解JavaScript中分解数字的三种方法
2021/01/05 Javascript
python中map()与zip()操作方法
2016/02/27 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
2018/03/19 Python
Python基于TCP实现会聊天的小机器人功能示例
2018/04/09 Python
python游戏地图最短路径求解
2019/01/16 Python
Python爬取微信小程序Charles实现过程图解
2020/09/29 Python
详解css3中 text-fill-color属性
2019/07/08 HTML / CSS
中邮全球便购:中国邮政速递物流
2017/03/04 全球购物
欧洲有机婴儿食品最大的市场:Organic Baby Food(供美国和加拿大)
2018/03/28 全球购物
加拿大服装和鞋类零售商:Mark’s
2021/01/04 全球购物
下述程序的作用是计算机数组中的最大元素值及其下标
2012/11/26 面试题
Solaris操作系统的线程机制
2015/07/28 面试题
学生自我鉴定模板
2013/12/30 职场文书
环保口号大全
2014/06/12 职场文书
乡镇党委书记个人整改措施
2014/09/15 职场文书
人口与计划生育责任书
2015/05/09 职场文书
唐山大地震的观后感
2015/06/05 职场文书
2016特色励志班级口号
2015/12/24 职场文书
MySQL数据库索引的最左匹配原则
2021/11/20 MySQL