php链式调用

我们经常在项目中会写到

Mode::find()->where()->orderBy()->limit();

链式调用,那么它是怎么实现的呢?

昨天看韩天峰大佬的视频,学到了 关键点在于类中方法返回的 return $this

我们平常使用的时候

$model = new BaseObject();
$model->where();
$model->limit();

当where 方法中最后返回 $this 的时候我们就可以使用

$model->where()->limit();

代码如下:

<?php
class BaseObject
{
    public $where;
    public $limit;

    function where($condition)
    {
        $this->where = $condition;
    }

    function limit($limit)
    {
        $this->limit = $limit;
    }
}

$model = new BaseObject();
$model->where([‘id‘ => 1]);
$model->limit(10);

var_dump($model);

结果为:

object(app\controllers\BaseObject)#1 (2) {
["where"]=>
array(1) {
["id"]=>
int(1)
}
["limit"]=>
int(10)
}

链式调用:

<?php
class BaseObject
{
    public $where;
    public $limit;

    function where($condition)
    {
        $this->where = $condition;
        return $this;
    }

    function limit($limit)
    {
        $this->limit = $limit;
        return $this;
    }
}

$model = new BaseObject();
$model->where([‘id‘ => 1])->limit(10);

var_dump($model);

结果为:

object(BaseObject)#1 (2) {
["where"]=>
array(1) {
["id"]=>
int(1)
}
["limit"]=>
int(10)
}

总结:

  1. 很多知识点,你如果不去思考,不去学习,你一直还是不会的,要养成独立思考和不断学习的习惯

  2. Leary by Practice,看到大佬当年桌面的屏保,通过实践学习,自己还是动手太少,一直停留在想的阶段,所以这个阶段多写代码,多做事

php链式调用

上一篇:Centos7 安装使用virtualenvwrapper


下一篇:USRNet:Deep Unfolding Network for Image Super-Resolution