Почему это работает, когда это не должно?передача по ссылке - PullRequest
0 голосов
/ 26 сентября 2018

Вот стандартное 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;
}

Почему theres $query модифицируется ПОСЛЕ того, как в качестве параметра передается ActiveDataProvider, и оно работает?Как массив с параметрами хранит ссылку на $query?

1 Ответ

0 голосов
/ 26 сентября 2018

ActiveQuery является изменяемым объектом, а в PHP объекты всегда передаются по ссылке.В вашем случае ссылка на $query присваивается $dataProvider->query, поэтому $query и $dataProvider->query указывают на один и тот же объект.Любая модификация $query также будет отражена в $dataProvider->query.

Подробнее об этом можно прочитать в PHP документации .

...