在php中有很多字符串函数,例如要先过滤字符串收尾的空格,再求出其长度,一般的写法是:

strlen(trim($str))

如果要实现类似js中的链式操作,比如像下面这样应该怎么写?

$str->trim()->strlen()

下面分别用三种方式来实现:

方法一、使用魔法函数__call结合call_user_func来实现

思想:首先定义一个字符串类StringHelper,构造函数直接赋值value,然后链式调用trim()和strlen()函数,通过在调用的魔法函数__call()中使用call_user_func来处理调用关系,实现如下:

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来实现

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 三种方式实现链式操作相关推荐

  1. C#利用WCF改进文件流传输的三种方式

    摘要:本文介绍C#利用WCF改进文件流传输的三种方式:MTOM模型.基于同步传输的异步回调模型.基于异步传输的异步模型,并提供相应的实现代码供参考. - WCF在跨域传输使用了两种模型的方法调用:一种 ...

  2. php支持链式操作,PHP三种方式实现链式操作-php教程

    正在php中有不少字符串函数,例如要先过滤字符串收尾的空格,再求出其长度,普通的写法是: strlen(trim($str)) 假如要完成相似js中的链式操作,比方像上面这样应该怎样写? $str-& ...

  3. 使用git下载项目到本地,指定本地文件夹位置的三种方式

    使用git下载项目到本地,指定本地文件夹位置的三种方式 使用VSCODE里的"克隆"功能直接粘贴项目链接即可选择本地想保存的位置. 使用git bash窗口下载项目之前,先切换到你 ...

  4. 文件上传的三种方式-Java

    前言:负责,因为该项目他(jetty嵌入式开始SpringMvc)实现文件上传的必要性,并拥有java文件上传这一块还没有被曝光.并 Http 更多晦涩协议.因此,这种渐进的方式来学习和实践上载文件的 ...

  5. 使用apache-poi生成excel文件与同步请求三种方式与文件下载

    使用apache-poi生成excel文件 a)添加依赖: <!-- poi依赖--><dependency><groupId>org.apache.poi< ...

  6. python中判断文件是否存在的三种方式_Python中判断文件是否存在的方法

    Python中判断文件是否存在的方法 发布时间:2020-08-06 11:15:42 来源:亿速云 阅读:58 作者:小新 这篇文章主要介绍Python中判断文件是否存在的方法,文中介绍的非常详细, ...

  7. java责任链模式的三种方式,分享一点面试小经验

    字节跳动 ⾯试前 ⼀⾯ ⼆⾯ ⼩结 ⾯试前 头条的⾯试是三家⾥最专业的,每次⾯试前有专⻔的HR和你约时间,确定OK后再进⾏⾯试.每次都是通过视频⾯试,因为都是之前都是电话⾯或现场⾯,所以视频⾯试还是有 ...

  8. Mybatis笔记整理1(基本文件与配置,三种方式完成数据库操作)

    基本文件与配置 pojo类,省略setget,tostring方法 public class User implements Serializable {/*** */private static f ...

  9. 元素等待的三种方式(隐式等待、显示等待、强制等待)

    目录 隐式等待 显示等待 强制等待 如何选用等待方式 隐式等待 # 隐式等待:设置一个超时时间,在这个时间内,不断的寻找元素,超时找不到就抛出异常 driver.implicitly_wait(10) ...

最新文章

  1. 为数据中心度身定制智能基础设施管理系统
  2. html语言amp,第二amp;三讲HTML语言.ppt
  3. python下绘制折线图
  4. 【Elasticsearch】使用两阶段提交在 Elasticsearch 中模拟事务功能
  5. 吴恩达机器学习之线性逻辑回归实现部分
  6. Ubuntu 16.04 软件安装
  7. MySQL的basedir
  8. 《我的第一本算法书》读书笔记
  9. 解决sublime text 3使用Install Package时出现There are no packages available for installation问题
  10. C++面试题,平时面试不可缺少的!
  11. SQL不同服务器数据库之间的数据操作整理(完整版)
  12. 不要问我有多懒,写个脚本跑django
  13. OpenCL编程入门
  14. 【BDTC 2018】PingCAP申砾:做一个真正通用的数据库产品
  15. 启动不了 驱动程序签字功能,bios关闭驱动数字签名 如何在bios禁用驱动程序签名,装系统,启动行为那个无效?...
  16. matlab 决策树 多叉树,决策树简介
  17. python实现股票历史数据可视化分析
  18. 微信公众号---收货地址共享接口
  19. 一文读懂 WalletConnect
  20. 如何读懂EDIFACT报文

热门文章

  1. Smarty模板引擎技术二
  2. 目录访问共享C#怎么访问共享目录
  3. 数据库应用程序为什么不能脱离数据库管理系统独立运行
  4. Multiple substitutions specified in non-positional format; did you mean to add the formatted=false
  5. 鸿蒙系统跟腾讯合作,要和华为鸿蒙竞争?腾讯系统开源了,仅1.8K,支持众多芯片 - 区块网...
  6. 数据 正则化 python_Python数据科学:正则化方法
  7. python标志变量_Python 中的 global 标识对变量作用域的影响
  8. 感恩节(美食火鸡大餐)PNG免扣素材 总有一款你用得上
  9. 为你的平面海报设计提供灵感和思路
  10. 电商风靡2020的C4D立体感海报设计,psd分层模板来了。