为什么这样有效呢?通过引用传递

use*_*785 0 php activerecord pass-by-reference yii2

这是标准Yii2 SearchModel search行动

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;
}
Run Code Online (Sandbox Code Playgroud)

为什么theres $query被修改AFTER作为参数传递给ActiveDataProvider它并且它有效?如何用params保持参考$query

rob*_*006 5

ActiveQuery是可变对象,并且PHP对象总是通过引用传递.在你的情况下,引用$query被分配给$dataProvider->query,所以$query$dataProvider->query指向同一个对象.任何修改也$query将反映在上面$dataProvider->query.

您可以在PHP文档中阅读更多相关信息.