php如何定义类似如下静态调用,并且通过箭头多级关联调用

php如何定义类似如下静态调用,并且通过箭头多级关联调用的类和函数

Db::name('name')->field('id,name')->where('id',1)->find()

阅读 323
评论
    1 个回答
    function name()
    {
        //code...
        return new static();
    }
    function where()
    {
        //code...
        return $this;
    }
    function field()
    {
        //code...
        return $this;
    }

    鉴于楼主知识点薄弱,详细回答下:

    第1步:
    Db::name()调用的是\think\Db类的name(),但是该类没有name(),所以实际调用的是__callStatic()(知识点1)。

    __callStatic()里调用的是self::connect()对象的name()self::connect()对象是new \think\db\connector\Mysql()。所以Db::name()实际调用的是(new Mysql())->name();

    Mysql里也没有name(),所以实际调用的父类Connectionname()(知识点2)。

    Connection里也没有name(),所以实际调用的Connection__call()(知识点3)。

    Connection__call()调用的是$this->getQuery()name()$this->getQuery()对象是new \think\db\Query()

    Query里有name(),所以Db::name()实际调用的是(new Query())->name();

    第2步:

    因为Query里的name()返回return $this;。所以->field('id,name')调用的是Query里有field()(知识点4)。

    第3步:

    因为Query里的field()返回return $this;。所以->where('id,name')调用的是Query里有where()

    第4步:

    因为Query里的where()返回return $this;。所以->find('id,name')调用的是Query里有find()

      撰写回答

      登录后参与交流、获取后续更新提醒