【发布时间】:2018-09-26 14:39:02
【问题描述】:
这是标准的Yii2SearchModelsearch操作
public function search($params, $cond)
{
$query = Service::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$this->load($params);
$query->where(['param' => $value]); //why this modified after it passed to provider?
return $dataProvider;
}
为什么 $query 在作为参数传递给 ActiveDataProvider 之后被修改并且它有效?带参数的数组如何保持对$query的引用?
【问题讨论】:
-
passing by reference 在函数声明中被“声明”,而不是在调用函数时(=在运行时)。
-
对象总是引用,除非你明确地克隆它
-
但是在匿名参数里面,怎么可能呢?
-
$query在数组中传递。所以ActiveDataProvider的原型会有一个定义为数组的参数 -
this
public function __construct($config = [])是 BaseObject 的声明,ActiveDataProvider继承自它。仅供参考(因为我正在寻找它)。
标签: php activerecord yii2 pass-by-reference