没有$的变量,可以吗?

时间:2011-08-22 13:02:40

标签: php parsing variables syntax-error

是否可以在不使用$的情况下引用变量?

例如:

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

我不这么认为,但代码(不是我写的)没有显示错误,我认为这很奇怪。我忽略了代码,也不是常量。

3 个答案:

答案 0 :(得分:9)

在PHP中,可以定义一个常量,该常量不会有$,但变量必须有一个。但是,这不是变量,也不是变量的替代品。常量只需定义一次,并且不会在脚本的整个生命周期内更改。

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

此外,您不能在双引号或HEREDOC字符串中插入常量的值:

$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'

答案 1 :(得分:2)

使用此代码:

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

您没有收到任何错误,因为您(或其他人)告诉PHP不报告任何包含该代码的错误,警告或通知。您将错误报告设置为更高级别,您将收到通知:

  

注意:使用未定义的常数a - 在...中假定为“a”

这意味着a被视为常量,其值为"a"。这不是你真正想要的东西我想:

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

第二部分"a" == true始终为true,所以实际上就是这样:

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

因为它不是你的代码,所以只能假设这不是原作者想要的。

所以:PHP中的变量总是以美元符号$开头。其他一切都不是变数。

答案 2 :(得分:1)

根据定义,变量必须以$开头。此外,不能以数字开头,因此像$ 1badVar这样的变量名称无效。但是,它可以以字母或下划线开头。