自己对PHP链式操作的理解

平常调用函数:

strlen(trim('011010','0'))

链式操作:

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

代码变优雅了,简单易懂,其实原理很简单。通过魔术方法__call来实现

class case1{
    public $value;

    public function __construct($str = NULL)
    {
        $this->value = $str;
    }

    public function __call($name, $args){
        $this->value = call_user_func($name,$this->value,$args[0]);
        return $this;
    }
    public function strlen(){
        return strlen($this->value);
    }
}

$str = new case1('0110100');

echo '</br>'.$str->value;//输出0110100


echo '</br>'.$str->trim('0')->strlen();//输出4

echo '</br>'.strlen(trim('0110100','0'));//输出4

这样就实现了一个简单的链式操作。

 链式操作的连续调用   最终值取决于 最后调用的那个方法,则最后一个方法  只能返回值  不能是对象就是$this    前面的方法共同点都是处理之后返回自身$this   所以就要在类或基类里申明变量。然后之前的方法对这些变量进行处理赋值   最后通过最后一个方法  返回一个值


也可以不用魔术方法,就是直接申明你需要的那个方法

class case1{
    public $value;

    public function __construct($str = NULL)
    {
        $this->value = $str;
    }

//    public function __call($name, $args){
//        $this->value = call_user_func($name,$this->value,$args[0]);
//        return $this;
//    }
    public function trim($val){
        $this->value = trim($this->value,$val);
        return $this;
    }
    public function strlen(){
        return strlen($this->value);
    }
}

$str = new case1('0110100');

echo '</br>'.$str->value;


echo '</br>'.$str->trim('0')->strlen();

echo '</br>'.strlen(trim('0110100','0'));
输出同样的结果
文章来源: 自己对PHP链式操作的理解

人吐槽 人点赞

猜你喜欢

发表评论

用户名: 密码:
验证码: 匿名发表

你可以使用这些语言

查看评论:自己对PHP链式操作的理解