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

发布于 2022-09-11 22:56:51 字数 116 浏览 24 评论 0

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

丢了幸福的猪 2022-09-18 22:56:51
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()

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文