Есть кусок кода, реализовал его так:
private function checkPermissions(array &$permissions, array &$responses)
{
foreach ($permissions as $key => $permission) {
if (!$this->isCorrectPermissionFormat($permission)) {
$responses[$permission]['code'] = \Response::BAD_REQUEST;
$responses[$permission]['message'] = "Permission has incorrect format";
unset($permissions[$key]);
} elseif (!$this->driver->isObjectExist($this->driver->path, $permission)) {
$responses[$permission]['code'] = \Response::NOT_FOUND;
$responses[$permission]['message'] = 'This permission does not exist';
unset($permissions[$key]);
}
}
}
т.е. передача по ссылке, был еще такой вариант:
private function checkPermissions(array $permissions, array $responses)
{
foreach ($permissions as $key => $permission) {
if (!$this->isCorrectPermissionFormat($permission)) {
$responses[$permission]['code'] = \Response::BAD_REQUEST;
$responses[$permission]['message'] = "Permission has incorrect format";
unset($permissions[$key]);
} elseif (!$this->driver->isObjectExist($this->driver->path, $permission)) {
$responses[$permission]['code'] = \Response::NOT_FOUND;
$responses[$permission]['message'] = 'This permission does not exist';
unset($permissions[$key]);
}
}
return [$permissions, $responses];
}
и в клиентском коде принимать эти значения через list().
Я слышал, что передача по ссылке - это плохо, и ее использовать крайне не рекомендуется. Как минимум, потому что передача по ссылке медленнее, как максимум - потому что может запутать разрабов и IDE (говорят, не всегда показывает, что параметр передается по ссылке).
Какой вариант бы выбрали вы, и почему?