@driverx18

Какой вариант из двух выбрать: передаче по ссылке, или без?

Есть кусок кода, реализовал его так:
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 (говорят, не всегда показывает, что параметр передается по ссылке).

Какой вариант бы выбрали вы, и почему?
  • Вопрос задан
  • 97 просмотров
Пригласить эксперта
Ответы на вопрос 3
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Если вопрос по ссылке или без - то однозначно ответ лучше передавать не по ссылке, так как меньше шансов выстрелить себе в ногу.
Но как написали выше, тут напрашивается рефакторинг, так как почему функция с названием checkPermissions() производит модификацию данных?
То есть это скорее getAvailablePermissions() или filterResponsePermissions() или типа того.

upd. Единственное что даст передача по ссылке, это экономия памяти, так как при передаче по ссылке не будут создаваться копии $permissions и $responses, но если у вас эти массивы не на сотни тысяч элементов, то экономить нечего.
Ответ написан
Комментировать
FanatPHP
@FanatPHP
Чебуратор тега РНР
Какой вариант бы выбрали вы, и почему?

передача по ссылке - это плохо, и ее использовать крайне не рекомендуется. Как минимум, потому что передача по ссылке медленнее, как максимум - потому что может запутать разрабов и IDE (говорят, не всегда показывает, что параметр передается по ссылке).
Ответ написан
Комментировать
vurdolak
@vurdolak
Фрилансер
POST тк sql инъекцию, сложнее произвести, чем через get
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы