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 相关文章推荐
substr()函数中文版
Oct 09 PHP
php下用GD生成生成缩略图的两个选择和区别
Apr 17 PHP
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
Mar 28 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
Jun 13 PHP
Drupal7 form表单二次开发要点与实例
Mar 02 PHP
php绘图之生成饼状图的方法
Jan 24 PHP
php实现粘贴截图并完成上传功能
May 17 PHP
PHP实现QQ空间自动回复说说的方法
Dec 02 PHP
Yii2增加验证码步骤详解
Apr 25 PHP
PHP magento后台无法登录问题解决方法
Nov 24 PHP
Zend Framework分发器用法示例
Dec 11 PHP
在IIS下安装PHP扩展的方法(超简单)
Apr 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
手把手教你使用DedeCms V3的在线采集图文教程
2007/04/03 PHP
Codeigniter的dom类用法实例
2015/06/26 PHP
windows下apache搭建php开发环境
2015/08/27 PHP
laravel中Redis队列监听中断的分析
2020/09/14 PHP
arguments对象
2006/11/20 Javascript
syntaxhighlighter 使用方法
2007/07/02 Javascript
JS实现点击链接取消跳转效果的方法
2014/01/24 Javascript
jq实现酷炫的鼠标经过图片翻滚效果
2014/03/12 Javascript
js 获取页面高度和宽度兼容 ie firefox chrome等
2014/05/14 Javascript
最短的IE判断var ie=!-[1,]分析
2014/05/28 Javascript
JS中完美兼容各大浏览器的scrolltop方法
2015/04/17 Javascript
jQuery往textarea中光标所在位置插入文本的方法
2015/06/26 Javascript
JS+Canvas 实现下雨下雪效果
2016/05/18 Javascript
获取url中用&amp;隔开的参数实例(分享)
2017/05/28 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
2017/08/09 jQuery
Mobile Web开发基础之四--处理手机设备的横竖屏问题
2017/08/11 Javascript
详解如何在微信小程序中愉快地使用sass
2018/07/30 Javascript
JS实现的简单分页功能示例
2018/08/23 Javascript
解决axios会发送两次请求,有个OPTIONS请求的问题
2018/10/25 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
2019/04/04 Javascript
Element Dialog对话框的使用示例
2020/07/26 Javascript
小程序中手机号识别的示例
2020/12/14 Javascript
Python使用numpy模块创建数组操作示例
2018/06/20 Python
Pyqt5 基本界面组件之inputDialog的使用
2019/06/25 Python
python实现修改固定模式的字符串内容操作示例
2019/12/30 Python
TensorFlow命名空间和TensorBoard图节点实例
2020/01/23 Python
Python对excel的基本操作方法
2021/02/18 Python
草莓巧克力:Shari’s Berries
2017/02/07 全球购物
仓库保管员岗位职责
2013/12/20 职场文书
殡葬服务心得体会
2014/09/11 职场文书
房屋租赁授权委托书范本
2014/09/20 职场文书
2014年行政助理工作总结
2014/11/19 职场文书
大学生志愿者心得体会
2016/01/15 职场文书
大学自主招生自荐信(2016精选篇)
2016/01/28 职场文书
python中Matplotlib绘制直线的实例代码
2021/07/04 Python
Docker与K8s关系介绍不会Docker也可以使用K8s
2022/06/25 Servers