喜欢研究 Yii2 底层的来围观,不明白查询构建器 build 为什么要用子类对象改成父类对象? [ 2.0 版本 ]
声明:yii/db/ActiveQuery
是 yii/db/Query
的子类
在 yii/db/ActiveQuery.php
有一句:
list ($sql, $params) = $db->getQueryBuilder()->build($this);
//这个->build($this);是调用下面的yii/db/QueryBuilder类,注意这里传入的是$this子类ActiveQuery对象。
yii/db/QueryBuilder.php
文件的方法
/**
* param Query $query
*/
pubic function build($query,$params[])
{
/* 这个$query 是上面传来的ActiveQuery子类 类实例,下面有一句不懂*/
$query = $query->prepare($this); //问题::这里为什么要在调用一次???
}
然后调用的 yii/db/Query
类的
public function prepare($builder)
{
return $this; //为什么上面还要调这里,这里也是返回当前Query对象啊
}
最佳答案
-
return19931112 发布于 2019-04-12 17:26 举报
最后明明调用的是
\yii\db\ActiveQuery::prepare()
,子类已经重写父类方法了共 1 条回复灰太狼 觉得很赞
其他 1 个回答
-
首先我没明白哪一点子类对象改成父类对象了。你从哪里看出来的?
你看看prepare这个方法的注释吧/** * Prepares for building SQL. * This method is called by [[QueryBuilder]] when it starts to build SQL from a query object. * You may override this method to do some final preparation work when converting a query into a SQL statement. * @param QueryBuilder $builder * @return $this a prepared query instance which will be used by [[QueryBuilder]] to build the SQL */
这是给开发人员对查询对象$query做发挥的地方,做最后的准备工作。参数$builder默认没有用而已;
灰太狼
注册时间:2016-11-19
最后登录:2023-07-14
在线时长:76小时17分
最后登录:2023-07-14
在线时长:76小时17分
- 粉丝28
- 金钱3290
- 威望150
- 积分5550