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指针,方便调用后者函数。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

时间: 2024-09-16 04:32:04

PHP三种方式实现链式操作详解的相关文章

mysql注入中三种报错模式利用方法详解

1.通过floor报错 可以通过如下一些利用代码  代码如下 复制代码 and select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a); and (select count(*) from (select 1 union select null union select  !1)x group by concat((select

胡余丰:三种增加外链主流方式的优与劣

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 外链是搜索优化的一件重磅武器,增加外链主要包括交换链接,论坛推广,博客推广三种,其他的像花钱买广告,挂马找肉鸡,一个是要花钱,一个要技术,其中后者还是违法的,不在这里讨论之列.此外像A5,艾瑞,门户通等投稿平台,实质上跟论坛差不多,区别在于文章直接发表和需要审核才发表,在这里把他们归入论坛一类来处理了.下面我就这三种增加外链的主流方式来谈谈自

JDBC的批处理操作三种方式

SQL批处理是JDBC性能优化的重要武器,经本人研究总结,批处理的用法有三种. package lavasoft.jdbctest; import lavasoft.common.DBToolkit; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; /** * JDBC的批量操作三种方式 * * @auth

揭秘百度贴吧留链接的三种方式

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 百度贴吧的流量之大不用多说,但是想要通过正常的渠道留下网站的链接基本上不可能的事情,接下来,我就我的个人经验向大家介绍一下在百度贴吧留链接的3种方式,都是干货,呵呵,其实不仅仅是百度贴吧,百度之后也是有异曲同工之妙的,好了,废话不多说,转入正题: 第一种方式,借助百度内在产品 百度的内在产品无外乎是百度空间.百度搜藏,这个方式很简单,百度空间

天上不会掉馅饼&amp;nbsp;创业快速获风投的三种方式

不要寄托于奔波在IT会场.遇及更多的VC就能融到资金:更不要想着VC众多,东方不亮西方亮,总有一两个会看懂你的商业模式. 你所要做的,恰恰是不必去考虑VC的胃口,他们喜欢什么或者今年什么模式会很热,专注于你正在做的项目,想清楚它想透它. 只有三种方式会帮助你的网络公司快速融到资金: 第一种:先围绕你的网站主题狂做流量,把网站迅速做到ALEXA排名2000位左右,最好能更高些.注意不要做假,自欺欺人的结果只会是无始而终.在拥有了有一定的.庞大的且稳定的用户基础上进行变阵,顺势变成你千思百想出的商业

探讨JavaScript中声明全局变量三种方式的异同

     这篇文章主要介绍了JavaScript中声明全局变量三种方式的异同.变量及变量声明是一门语言最基本的概念,初学者都会很快掌握.需要的朋友可以过来参考下,希望对大家有所帮助 变量及变量声明是一门语言最基本的概念,初学者都会很快掌握.JavaScript中声明变量也是如此,很简单var(关键字)+变量名(标识符).   方式1   var test; var test = 5;需注意的是该句不能包含在function内,否则是局部变量.这是第一种方式声明全局变量.   方式2   test

数据导入HBase最常用的三种方式及实践分析

要使用Hadoop,数据合并至关重要,HBase应用甚广.一般而言,需要 针对不同情景模式将现有的各种类型的数据库或数据文件中的数据转入至HBase 中.常见方式为:使用HBase的API中的Put方法: 使用HBase 的bulk load 工具:使用定制的MapReduce Job方式.<HBase Administration Cookbook>一书对这三种方式有着详尽描述,由 ImportNew 的陈晨进行了编译,很有收获,推荐给大家. HBase数据迁移(1)-使用HBase的API

spring配置datasource三种方式

spring配置datasource三种方式 1.使用org.springframework.jdbc.datasource.DriverManagerDataSource 说明:DriverManagerDataSource建立连接是只要有连接就新建一个connection,根本没有连接池的作用. <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSour

javascript复制数组的三种方式

在前端开发中,复制数组是经常用到的功能.现在老K为大家总结一下javascript中复制数组的三种方式.   1.普通的for循环   这是一种使用最普遍的方式.利用js的for循环再生成一个相同的数组.代码如下:   var arr=[1,2,3]; var arr2=[]; for(var i=0; i<arr.length; i++){ arr2[i]=arr[i]; } console.log(arr, arr2);   输出: [1,2,3] [1,2,3]   为了验证arr2不是简