Вопрос:
Когда-то я был на стажировке, и я работал младшим веб-разработчиком. Во время работы и обучения я заметил, что при смене страниц вместо использования isset($_POST/GET/REQUEST[«var»]) они просто использовали $_POST/GET/REQUEST[«var»].
Итак, позже я пришел домой и попробовал то же самое. Что происходит? Каждый раз я сталкиваюсь с if() чтобы убедиться, что я должен использовать isset(), а другой – это ошибка. Но заметьте одно, мой url это:
?p=sub_artigo&id=2
Итак, когда я выполняю условие if():
if(isset($_REQUEST[«p»])==»procurar» && $_REQUEST[‘cont’]){
Он не показывает ошибок, но если я беру isset(), он дает обычную ошибку, которую я вижу на форумах и здесь.
Поэтому мой вопрос: почему не отображается ошибка для второй переменной?
Примечание: p-> string; id-> int
Лучший ответ:
У них error_reporting отклонено, что приятно, потому что это означает, что вы можете делать что-то вроде
if ($_POST[‘whatever’]) { … }
вместо
if (isset($_POST[‘whatever’])) { … }
но это также мешает вам видеть другие, возможно, улокальные ошибки.
этот параметр находится в файле php.ini в переменной error_reporting.
Более подробную информацию о файле ini можно найти здесь: http://php.net/manual/en/ini.php
Кроме того, isset($_REQUEST[«p»])==»procurar» то время как sytactically correct, никогда не вернет true, потому что isset() возвращает логическое значение.
то, что вы хотите, isset($_REQUEST[‘p’]) && $_REQUEST[‘p’] == ‘procurar’
Ответ №1
RTM: http://php.net/isset
isset() возвращает логическое значение TRUE/FALSE. Он НИКОГДА не вернет строку, поэтому это утверждение
if(isset($_REQUEST[«p»])==»procurar» && $_REQUEST[‘cont’]){
никогда НИКОГДА не получится, потому что isset() никогда не будет равняться procurar, поэтому проверка [‘cont’] никогда не будет оценена.
Ответ №2
Когда первый оператор является ложным, PHP не беспокоит остальную часть оператора if.
Я всегда использую следующую проверку для каждого ключа $ _REQUEST, $ _POST или $ _GET:
function ifSet($key) { return (isset($_REQUEST[$key]) && $_REQUEST[$key])?$_REQUEST[$key]:»; }
Это никогда не даст вам никаких предупреждений, даже если error_reporting установлен на E_ALL.
“Исеть” проверяет, установлен ли ключ $, и после этого он проверяет, имеет ли значение $ ключ.