Что-то не так с приведением $ _REQUEST к объекту? - PullRequest
1 голос
/ 02 декабря 2011

В PHP неправильно приводить $_REQUEST к объекту для более простого управления им?

$request = (object) $_REQUEST;
if(isset($request->submit) && isset($request->text) && !empty($request->text))
{
   // Do stuff
}

РЕДАКТИРОВАТЬ : я имею в виду любой неожиданный побочный эффект?

Ответы [ 3 ]

3 голосов
/ 02 декабря 2011

Я бы сказал, что в этом нет ничего плохого, кроме, очевидно, небольшого дополнительного времени, которое вы получите. Однако я хотел бы запустить массив $ _REQUEST через более чистую функцию для проверки и очистки переменных. Таким образом, вы всегда можете знать, что если вы используете объектную версию $ _REQEUST, это безопасно для использования.

Обновление

Я бы сказал, что это, вероятно, лучшая практика в мире современных веб-приложений. Я имею в виду, посмотрите на используемые вами MVC-фреймворки (Zend, CodeIgniter, CakePHP и т. Д.). Все они очищают $ _REQUEST, $ _GET, $ _POST, $ _SERVER и т. Д. И преобразуют их в объекты.

Помните, что накладные расходы на что-то вроде этого будут настолько минимальными, что вы даже не заметите этого. Время, которое PHP занимает для анализа и вывода страницы, настолько мало, что обычно меньше, чем запрос DOM для одного изображения.

2 голосов
/ 02 декабря 2011

Не спорю, но я не понимаю, как это облегчает управление переменной $_REQUEST.Вы можете написать ту же строку кода следующим образом:

if(isset($_REQUEST['submit']) && isset($_REQUEST['text']) && !empty($_REQUEST['text']))
{
   // Do stuff
}

Также могут быть некоторые проблемы с ключами массива, которые не переводятся в имена свойств объекта должным образом.Возьмите для примера $_REQUEST['var name'].Полностью допустимое имя массива, но преобразование массива в объект, и вы будете очень разочарованы результатами.

Однако, если вы очень доверяете своим пользователям и хотите потратить дополнительные такты на создание нового объекта, вымог всегда грубо насиловать его.

$request = new stdclass;
foreach($_REQUEST as $field => $value){
    $request->$field = $value;
}
2 голосов
/ 02 декабря 2011

Ничего из того, что я вижу, неправильно с этим.

Это просто позволит вам получить доступ к ассоциативному массиву как объекту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...