Я знаю, что уже был дан ответ, но вот мои $ 0,02.
Я бы не отменил или не очистил входные массивы. Однако то, что я сделал, это заменить их объектом. Поэтому вместо того, чтобы иметь необработанный массив, я заменяю его объектом, который реализует ArrayAccess
и Iterator
. Таким образом, подавляющее большинство кода, которое использует собственные массивы, по-прежнему будет хорошо работать с объектом.
Обоснование заключается в том, что по крайней мере вы можете проверить правильность работы кодов с помощью тестов. Вы можете заменить эти объекты макетным объектом, чтобы исключить исключение во время тестирования, чтобы вы могли обнаружить неправильный доступ к этим массивам (если вы это определите как «плохую практику»). Таким образом, он позволяет запускать во время производства, не применяя ненужные ограничения, но также позволяет включить его, чтобы проверять лучшие практики во время тестирования.
И хотя я согласен с @JW об экранировании, вы должны фильтровать входные данные. Отфильтровать, Выйти.Каждый раз, когда данные поступают в вашу программу (либо через пользовательский ввод, либо из БД), отфильтруйте его до ожидаемых значений. В любое время, когда данные удаляются (либо в БД, либо пользователю), вам необходимо надлежащим образом избежать его для этого носителя. Поэтому использование объекта запроса, который позволяет легко фильтровать представленные данные, может быть очень ценным.
Пример использования текучий интерфейс (который вы можете или не можете хотеть):
$id = $request->get('some_id')->filter('int', array('min' => 1));
И это не включает в себя преимущества компенсации отличаясь платформ и конфигураций (например, если magic_quotes_gcp
включена или нет, и т.д.) ...
Во всяком случае, это только мое мнение ...
Я решил заменить их объектами, которые реализуют 'ArrayAccess',' Iterator' и 'Countable'. Спасибо за отличную идею! – Stephen