2011-08-22 88 views
6

是否有可能引用一個變量而不使用$?

例如:

if ($a != 0 && a == true) { 
... 
} 

我不這麼認爲,但代碼(不是我寫的)不顯示錯誤,我認爲這是奇怪的。我忽略了代碼,並且它也不是一個常量。

+5

嘗試:'error_reporting(E_ALL^E_STRICT);'並且php會告訴你它找不到'$ a',而是使用文字'a'(表示字符a)進行比較。 – Yoshi

+0

@Yoshi:寫一個答案; p –

+0

@Tomalak Geret'kal Michael已經包含了這一點,他甚至有更好的解釋。; P – Yoshi

回答

8

在PHP中,可以定義一個常量,然後這個常量沒有$,但是一個變量必須有一個。但是,這不是一個變量,並且不能代替變量。常量旨在被定義一次,並且在腳本的整個生命週期中都不會改變。

define('a', 'some value for a'); 

此外,您不能插在雙引號或者定界符字符串內恆定的值:

$a = "variable a" 
define('a', 'constant a'); 

echo "A string containing $a"; 
// "A string containing variable a"; 

// Can't do it with the constant 
echo "A string containing a"; 
// "A string containing a"; 

最後,PHP可發出通知,爲Use of undefined constant a - assumed 'a',並把它解釋爲一個錯誤未加引號字符串"a"。看看你的錯誤日誌,看看是否發生。在這種情況下,"a" == TRUE是有效的,因爲字符串"a"非空,並且它與布爾值TRUE鬆散比較。

echo a == TRUE ? 'true' : 'false'; 
// Prints true 
// PHP Notice: Use of undefined constant a - assumed 'a' 
+0

最重要的是,默認情況下,如果PHP看到一個未定義的常量,它將假定一個常量與字符串的值。用你的例子,PHP將把它解釋爲一個名爲a的常量,其值爲'a'(作爲字符串)。這確實會引起通知或其他事情:增加您的錯誤報告值以查看它。 – Narcissus

+0

@Narcissus謝謝 - 在您輸入您的評論時已添加:) –

2

有了這個代碼:

if ($a != 0 && a == true) { 
    ... 
} 

你沒有得到任何錯誤,因爲你(或其他人)告訴PHP不報告任何錯誤,警告或通知,與該代碼。您可以設置錯誤向更高層次發展的報告,你會得到一個通知:

注意:使用未定義的常量a - 假定在「A」 ...

這將意味着a讀作爲值爲"a"的常數。這不是你實際上是在尋找我猜:

if ($a != 0 && "a" == true) { 
    ... 
} 

第二部分"a" == true永遠是true,所以實際上像這樣:

if ($a != 0) { 
    ... 
} 

,因爲它不是你的代碼,一個只能假定這不是原作者的意圖。

因此:PHP中的變量始終以美元符號$開頭。其他一切都不是一個變量。

1

根據定義,變量必須以$開頭。另外,它不能開始一個數字,所以像$ 1badVar變量名稱是無效的。但是,它可能以字母或下劃線開頭。