php如何定义类似如下静态调用,并且通过箭头多级关联调用
php如何定义类似如下静态调用,并且通过箭头多级关联调用的类和函数
Db::name('name')->field('id,name')->where('id',1)->find()
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
php如何定义类似如下静态调用,并且通过箭头多级关联调用的类和函数
Db::name('name')->field('id,name')->where('id',1)->find()
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(1)
鉴于楼主知识点薄弱,详细回答下:
第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()
,所以实际调用的父类Connection
的name()
(知识点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()
。