Работал ли isset по-другому в старых версиях

StackOverflow https://stackoverflow.com/questions/401747

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

Кто-нибудь?

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

if (isset($_GET['pagina']) && ($_GET['pagina'] == "homepage")) {
}

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

  • Isset был где-то переопределен?
  • Это самоизменяющаяся версия PHP?
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top