2010-04-30 2 views
2

Я пытаюсь отлаживать простой PHP-скрипт. По существу, есть переменная, которая определяется с помощью:Может ли кто-нибудь объяснить этот невозможный бит логики PHP?

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

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

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

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

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

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

спасибо.

ответ

3

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

<? if ($variable) { ?> 

или

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

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

<?PHP if (TRUE == $variable) : ?> 
    <p class="box">You have imported a new plan.</p> 
<?PHP endif; ?> 
1

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

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

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

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

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

2

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

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

По правилам разбора РНР, переменная $ равна «истина», если переменная $ не было присвоено либо значение «ложь» или «нулевой».

PHP-истина в принципе бесполезна для сравнений, поскольку значение ANY, которое может быть приложено к типу, отличное от нуля/не-null/не-false, будет оцениваться как логическое значение 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 
Смежные вопросы