“处理过的PHP”;0“;是空的吗?

“处理过的PHP”;0“;是空的吗?,php,Php,我遇到了一个php以不同方式处理“0”的问题 我在两台不同的机器上运行以下脚本: $a = "0"; if ($a) { echo("helo"); } 1) 本地机器->PHP5.2.17 ->它将“0”视为有效,并打印“helo” 2) 服务器->PHP5.3.6 ->它将“0”视为空/假,并且不会打印“helo” 这是由于php配置(如果是,是什么配置)还是php版本造成的?应该是这样的。PHP在布尔上下文中解释字符串。那里的“0”相当于实际的0。(另见) 您想要测试的可能是:

我遇到了一个php以不同方式处理“0”的问题

我在两台不同的机器上运行以下脚本:

$a = "0";
if ($a) {
    echo("helo");
}
1) 本地机器->PHP5.2.17 ->它将“0”视为有效,并打印“helo”

2) 服务器->PHP5.3.6 ->它将“0”视为空/假,并且不会打印“helo”


这是由于php配置(如果是,是什么配置)还是php版本造成的?

应该是这样的。PHP在布尔上下文中解释字符串。那里的
“0”
相当于实际的
0
。(另见)

您想要测试的可能是:

if (strlen($a)) {

if($a)
应为
FALSE
,根据。在本地机器上也应该是这样。您确定在本地计算机上,0或其他名称后没有空格吗?(“
0
”应该是
TRUE

听起来很奇怪,我认为“0”是假的,你可以回顾一下PHP可能会将“0”插入为false,就像它等同于null/false/0一样

但是,它也可以将其作为字符串“0”插入。因此if语句将返回true,但是,我认为这将是一个bug,除非您键入cast to(string)

就像马里奥说的,检查strlen($a)或者检查(!empty($a))这样你就能得到你的最终答案


我希望这有帮助

但它在PHP5.2.17中没有这样做?PHP5.2.17(Win32)在
$a=“0”时不打印“helo”(只是在CLI上并通过Apache对其进行了测试以确保)。字符串中一定还有另一个字符-可能是打印时不可见的空白字符,如
\r