2011-08-22 59 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变量名称是无效的。但是,它可能以字母或下划线开头。

相关问题