资讯专栏INFORMATION COLUMN

PHP 三种方式实现链式操作

AbnerMing / 1325人阅读

摘要:新数组的值将被插入到数组的开头。和都是动态调用函数的方法,区别在于参数的传递方式不同。方法三不使用魔法函数来实现只需要修改为函数即可重点在于,返回指针,方便调用后者函数。

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

strlen(trim($str))

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

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

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

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

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30526.html

相关文章

  • php实现数据结构】链式队列

    摘要:什么是链式队列队列是一种先进先出的存储结构是一种特殊的线性表,于它只允许在表的前端进行删除操作,而在表的后端进行插入操作。 什么是链式队列 队列是一种先进先出的存储结构,是一种特殊的线性表,于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。通常队列可以分为顺序队列和链式队列两种实现,顺序队列顾名思义就是采用顺序存储,如以数组方式来实现,链式队列采用链...

    王晗 评论0 收藏0
  • micro activerecord library in PHP(一个微型的PHP实现的AR库)

    摘要:一个微型的实现的库体积很小带详尽的注释总共只有行支持链式调用支持关系前言最开始接触是在学习的时候,那个时候觉得用操作数据库真的是太方便了。但是已经算是一个小型的库了。同样的还提供了简写的以及,等接口函数。 一个微型的PHP实现的AR库 体积很小带详尽的注释总共只有400行支持链式调用支持关系 前言 最开始接触ActiveRecord是在学习Yii的时候,那个时候觉得用AR操作数据库真的...

    i_garfileo 评论0 收藏0
  • php链式操作实现四则链式运算

    重点在于,返回$this指针,方便调用后者函数。 Operation.php

    maxmin 评论0 收藏0
  • jQuery插件教程

    摘要:就是内部作为全局函数的插件添加到内核上去的。选择器插件扩充自己喜欢的一些选择器。在插件里的,经过了一些封装处理,就是表示对象。调用时,字体大小会运用插件里的默认值 jQuery插件的分类 jQuery插件有很多,有UI类,表单验证,输入类,特效类,Ajax类,滑动类,导航类,工具类,动画类等等。 jQuery的插件主要分为三类: 1、封装对象方法的插件:也就是基于某个DOM元素的...

    Arno 评论0 收藏0

发表评论

0条评论

AbnerMing

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<