Кто-нибудь может объяснить это невозможное немного логики PHP? - PullRequest
2 голосов
/ 01 мая 2010

Я пытаюсь отладить простой скрипт PHP. По сути, есть переменная, которая определяется с помощью:

$variable = ($_GET['variable'] == 'true') ? TRUE : FALSE;

Затем в файле представления следующий код предназначен для отображения поля, если $ variable == TRUE:

<? if ($variable == true) { ?>
<p class="box">You have imported a new plan.</p>
<? } ?>

Теперь, даже когда эта переменная $, как показано в var_dump ($ variable); == FALSE, этот HTML-код печатается между тегами if {}. Для меня это не поддается логике. Я просто не могу понять эту проблему.

Кроме того, этот код отлично работает на многих установках PHP4 и PHP5, за исключением одного конкретного сервера, на котором работает PHP5.2.

Любые возможные предложения? Ведет? Я вырываю свои волосы, пытаясь понять это.

Спасибо.

Ответы [ 4 ]

3 голосов
/ 01 мая 2010

Может быть, короткие теги отключены? Попробуйте использовать

<?PHP if ( TRUE == $variable ) : ?>
    <p class="box">You have imported a new plan.</p>
<?PHP endif; ?>
3 голосов
/ 01 мая 2010

Никогда не сравнивайте на равенство с true или false, только идентичность.

<? if ($variable) { ?>

или

<? if ($variable === true) { ?>
2 голосов
/ 01 мая 2010

Проблема заключается в следующем:

<? if ($variable == true) { ?>

По правилам синтаксического анализа PHP переменная $ равна 'true', если переменной $ не присвоено ни значение 'false', ни 'null'.

Значение PHP true в принципе бесполезно для сравнений, так как ЛЮБОЕ значение, которое может быть типо-ненулевым / ненулевым / ненулевым, оценивается как логическое true.

Следующее:

<?php

echo '7: ', (7 == true) ? 'true' : 'false', "\n";
echo '-1: ', (-1 == true) ? 'true' : 'false', "\n";
echo '0: ', (0 == true) ? 'true' : 'false', "\n";
echo 'null: ', (null == true) ? 'true' : 'false', "\n";
echo 'true: ', (true == true) ? 'true' : 'false', "\n";
echo 'abc: ', ('abc' == true) ? 'true' : 'false', "\n";
echo 'array: ', (array() == true) ? 'true' : 'false', "\n";

Результат:

7: true
-1: true
0: false
null: false
true: true
abc: true
array: false
1 голос
/ 01 мая 2010

Сначала прочитайте это: http://www.php.net/manual/en/language.types.boolean.php

Мне кажется, что здесь есть две версии правды. Первый шаг, поиск значения $_GET['variable'] - поиск строки 'true' и присвоение константы $variable. Строка 'true' в этом случае не имеет отношения к логической истине. Все, кроме строки 'true', приведет к присвоению константы FALSE.

TRUE и FALSE - предопределенные константы в php.

Использование переменной $ не должно сравниваться с истиной или ложью. Просто используйте if($variable) вместо.

SaltLake прав, что вы должны проверить свои короткие теги. Я всегда использовал <?php ?> вместо того, чтобы быть в безопасности.

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