Очень необычное поведение PHP - PullRequest
0 голосов
/ 13 августа 2011

для кода ниже я получаю страницу, которая выполняет задание на печать, и затем завершаю работу, даже если значение задания равно нулю.

$task = (isset($_POST['task']))?$_POST['task'] :(isset($_GET['task']))?$_GET['task']:0; 
if($task == "delete") {
    echo $task;
    exit(); 
}

выход:

0

однако, если я изменю первую строку на:

$task = (isset($_POST['task'])) ? $_POST['task'] :(isset($_GET['task'])) ? $_GET['task'] : NULL;    

это будет работать нормально, так почему же значение строки 'delete' равно 0?

Ответы [ 2 ]

11 голосов
/ 13 августа 2011

любая строка, которая не может быть преобразована в число, автоматически конвертируется в 0;так что «delete» равен 0 при сравнении с числом.

вы можете сравнить с помощью оператора идентификации для проверки типов

if($task === "delete") {
    echo $task;
    exit(); 
}

Это обеспечит проверку типа и возврат false какрезультат.

2 голосов
/ 13 августа 2011

Вам не хватает скобок в вашем троичном операторе, см. Пример в приоритете оператора :

$a = true ? 0 : true ? 1 : 2; // (true ? 0 : true) ? 1 : 2 = 2

Ваш пример:

$task =
  (
    (isset($_POST['task']))
    ? $_POST['task']
    : (isset($_GET['task']))
  )
  ? $_GET['task']
  : 0;

Таким образом, в зависимости от ваших $_POST и $_GET, вы можете даже получить предупреждение PHP "недопустимый индекс".

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