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 相关文章推荐
如何将数据从文本导入到mysql
Oct 09 PHP
AJAX for PHP简单表数据查询实例
Jan 02 PHP
mysql 搜索之简单应用
Apr 27 PHP
ZF等常用php框架中存在的问题
Jan 10 PHP
php csv操作类代码
Dec 14 PHP
将博客园(cnblogs.com)数据导入到wordpress的代码
Jan 06 PHP
php常用Stream函数集介绍
Jun 24 PHP
php fsockopen解决办法 php实现多线程
Jan 20 PHP
完美的2个php检测字符串是否是utf-8编码函数分享
Jul 28 PHP
php正则preg_replace_callback函数用法实例
Jun 01 PHP
全面了解PHP中的全局变量
Jun 17 PHP
php使用fullcalendar日历插件详解
Mar 06 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
人族 Terran 基本策略
2020/03/14 星际争霸
php提示Call-time pass-by-reference has been deprecated in的解决方法[已测]
2012/05/06 PHP
tp5实现微信小程序多图片上传到服务器功能
2018/07/16 PHP
用 JSON 处理缓存
2007/04/27 Javascript
javascript 特性检测并非浏览器检测
2010/01/15 Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
2012/02/27 Javascript
Javascript中产生固定结果的函数优化技巧
2013/01/16 Javascript
jQuery Mobile操作HTML5的常用函数总结
2016/05/17 Javascript
nodejs基础知识
2017/02/03 NodeJs
简单实现js菜单栏切换效果
2017/03/04 Javascript
jQuery中用on绑定事件时需注意的事项
2017/03/19 Javascript
微信小程序 自动登陆PHP源码实例(源码下载)
2017/05/08 Javascript
关于redux-saga中take使用方法详解
2018/02/27 Javascript
Vue 根据条件判断van-tab的显示方式
2020/08/03 Javascript
vue 避免变量赋值后双向绑定的操作
2020/11/07 Javascript
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
2020/12/02 Vue.js
Python中关于字符串对象的一些基础知识
2015/04/08 Python
Python中列表和元组的使用方法和区别详解
2020/12/30 Python
Python爬取qq music中的音乐url及批量下载
2017/03/23 Python
利用python将json数据转换为csv格式的方法
2018/03/22 Python
python 用for循环实现1~n求和的实例
2019/02/01 Python
Python 3.8 新功能大揭秘【新手必学】
2020/02/05 Python
Python restful框架接口开发实现
2020/04/13 Python
java字符串格式化输出实例讲解
2021/01/06 Python
时尚的CSS3进度条效果
2012/02/22 HTML / CSS
详解HTML5中div和section以及article的区别
2015/07/14 HTML / CSS
Dillard’s百货官网:Dillards.com
2018/05/26 全球购物
Happy Socks英国官网:购买五颜六色的袜子
2020/11/03 全球购物
Puccini乌克兰:购买行李箱、女士手袋网上商店
2020/08/06 全球购物
教师群众路线剖析材料
2014/09/29 职场文书
大学生迟到检讨书500字
2014/10/17 职场文书
2014年审计工作总结
2014/11/17 职场文书
2015年幼儿园后勤工作总结
2015/04/25 职场文书
7个你应该知道的JS原生错误类型
2021/04/29 Javascript
Golang的继承模拟实例
2021/06/30 Golang
详解使用内网穿透工具Ngrok代理本地服务
2022/03/31 Servers