Работал ли isset по-другому в старых версиях - PullRequest
0 голосов
/ 31 декабря 2008

У меня есть какой-то устаревший код, который имеет это:

<?PHP
    if(isset($_GET['pagina'])=="homepage") {
?>
HtmlCode1
<?php 
} else { 
?>
HtmlCode2
<?php 
} 
?>

Я не знаю точно, почему, но, похоже, это работает. Htmlcode1 загружается, когда у меня есть? Pagina = homepage, а htmlcode2 загружается, когда pagina var не существует или является чем-то другим (на самом деле не видел с чем-то еще, просто нет) Сайт использует php4 (не знаю точную версию). Но на самом деле, как это может работать? Я посмотрел на руководство и там написано, что isset возвращает bool ..

Любой

Ответы [ 4 ]

7 голосов
/ 31 декабря 2008

isset() возвращает истину или ложь. В логическом сравнении "homepage" оценивается как true. Итак, по сути вы попали сюда:

if ( isset($_GET['pagina']) == true )

Если pagina равняется чему-либо, вы увидите HtmlCode1. Если он не установлен, вы увидите HtmlCode2.

Я только что попытался это подтвердить, и переход на ?pagina=somethingelse не не показывает HtmlCode2.

4 голосов
/ 31 декабря 2008

Я подозреваю, что это ошибка, так как не имеет смысла сравнивать true / false с "homepage". Я ожидаю, что код на самом деле должен быть:

if (isset($_GET['pagina']) && ($_GET['pagina'] == "homepage")) {
}
3 голосов
/ 31 декабря 2008

Проблема в том, что "==" не является чувствительным к типу сравнением. Любая (непустая) строка «равна» логическому значению true, но не идентична (для этого вам нужно использовать оператор «===»).

Быстрый пример того, почему вы видите такое поведение:
http://codepad.org/aNh1ahu8

А подробности об этом см. В документации:
http://php.net/manual/en/language.operators.comparison.php
http://ca3.php.net/manual/en/types.comparisons.php (таблица "Слабые сравнения с ==")

0 голосов
/ 31 декабря 2008

Некоторые идеи, как это могло бы работать (кроме ранее упомянутой «домашней страницы» == true):

  • Isset был переопределен где-то?
  • Это самоизменяемая версия PHP?
...