PHP三种方式实现链式操作详解


Posted in PHP onJanuary 21, 2017

在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代码
Feb 16 PHP
ThinkPHP处理Ajax返回的方法
Nov 22 PHP
php上传图片类及用法示例
May 11 PHP
php加密解密字符串示例
Oct 13 PHP
PHP自定义函数获取汉字首字母的方法
Dec 01 PHP
THINKPHP截取中文字符串函数实例代码
Mar 20 PHP
yii插入数据库防并发的简单代码
May 27 PHP
php-fpm服务启动脚本的方法
Apr 27 PHP
PHP 二维array转换json的实例讲解
Aug 21 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
Mar 26 PHP
PHP页面静态化――纯静态与伪静态用法详解
Jun 05 PHP
laravel admin实现分类树/模型树的示例代码
Jun 10 PHP
PHP将字符串首字母大小写转换的实例
Jan 21 #PHP
thinkphp 手机号和用户名同时登录
Jan 20 #PHP
thinkphp实现把数据库中的列的值存到下拉框中的方法
Jan 20 #PHP
php curl常用的5个经典例子
Jan 20 #PHP
php技巧小结【推荐】
Jan 19 #PHP
Yii CDBCriteria常用方法实例小结
Jan 19 #PHP
PHP对象实例化单例方法
Jan 19 #PHP
You might like
PHP 观察者模式的实现代码
2013/05/10 PHP
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
2014/11/20 PHP
PHP自毁程序(慎用)
2015/07/09 PHP
PHP使用OB缓存实现静态化功能示例
2019/03/23 PHP
jquery ajax abort()的使用方法
2010/10/28 Javascript
Javascript 判断是否存在函数的方法
2013/01/03 Javascript
JavaScript 上万关键字瞬间匹配实现代码
2013/07/07 Javascript
利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器)
2013/11/22 Javascript
Nodejs实现多人同时在线移动鼠标的小游戏分享
2014/12/06 NodeJs
javascript实现表格排序 编辑 拖拽 缩放
2015/01/02 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
js方法数据验证的简单实例
2016/09/17 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
2016/10/31 Javascript
Iscrool下拉刷新功能实现方法(推荐)
2017/06/26 Javascript
全面介绍vue 全家桶和项目实例
2017/12/27 Javascript
使用jquery模拟a标签的click事件无法实现跳转的解决
2018/12/04 jQuery
React组件设计模式之组合组件应用实例分析
2020/04/29 Javascript
Python实现对PPT文件进行截图操作的方法
2015/04/28 Python
Python3使用正则表达式爬取内涵段子示例
2018/04/22 Python
python自动发送邮件脚本
2018/06/20 Python
Django学习笔记之为Model添加Action
2019/04/30 Python
python定时复制远程文件夹中所有文件
2019/04/30 Python
Python利用WMI实现ping命令的例子
2019/08/14 Python
Python求解排列中的逆序数个数实例
2020/05/03 Python
keras之权重初始化方式
2020/05/21 Python
allbeauty美国:英国在线美容店
2019/03/11 全球购物
法律进社区实施方案
2014/03/21 职场文书
食品科学与工程专业毕业生求职信范文
2014/07/21 职场文书
企业党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2014年新教师工作总结
2014/11/08 职场文书
具结保证书
2015/01/17 职场文书
记者节感言
2015/08/03 职场文书
Django路由层如何获取正确的url
2021/07/15 Python
Java详细解析==和equals的区别
2022/04/07 Java/Android
nginx lua 操作 mysql
2022/05/15 Servers