2010-04-30 52 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

千萬不要與truefalse相等,只是標識。

<? 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是正確的,你應該檢查你的短標籤。我alwasys使用<?php ?>而不是安全。

2

問題是這樣的:

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

通過PHP的解析規則,如果$變量尚未分配$變量等於「真」的值或者是「假」或「空」。

對於比較而言,PHP的真實基本上是無用的,因爲任何可以被強制轉換爲非零/非空/非假的值都將計算爲布爾真。

以下:

<?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 
相關問題