在旧版本中,isset的工作方式有所不同

时间:2008-12-30 22:44:01

标签: php legacy-code

我得到了一些遗留代码:

<?PHP
    if(isset($_GET['pagina'])=="homepage") {
?>
HtmlCode1
<?php 
} else { 
?>
HtmlCode2
<?php 
} 
?>

我不确切知道为什么,但这似乎有效。当我有?pagina = homepage时加载htmlcode1并且当pagina var不存在时加载htmlcode2或者是其他东西(没有真正看到别的东西,只是不存在)。 该网站使用的是php4(不知道具体版本)。 但实际上,这怎么可行呢?我查看了手册,它说isset返回一个bool ..

任何?

4 个答案:

答案 0 :(得分:7)

isset()返回true或false。在布尔比较中,"homepage"将评估为true。所以基本上你来到这里:

if ( isset($_GET['pagina']) == true )

如果pagina等于任何东西,你会看到HtmlCode1。如果未设置,您将看到HtmlCode2。

我刚尝试确认一下,转到?pagina=somethingelse 显示HtmlCode2。

答案 1 :(得分:4)

我怀疑这是一个错误,因为将“true / false”与“主页”进行比较并没有多大意义。我希望代码实际上应该是:

if (isset($_GET['pagina']) && ($_GET['pagina'] == "homepage")) {
}

答案 2 :(得分:3)

问题是“==”不是类型敏感的比较。任何(非空)字符串与布尔值“相等”,但不与相同(因为您需要使用“===”运算符)。

一个简单的例子,为什么你会看到这种行为:
http://codepad.org/aNh1ahu8

有关文档的详细信息,请参阅:
http://php.net/manual/en/language.operators.comparison.php
http://ca3.php.net/manual/en/types.comparisons.php(具体为“与==的宽松比较”表)

答案 3 :(得分:0)

一些想法如何起作用(除了前面提到的“主页”== true):

  • Isset已在某处重新定义?
  • 这是PHP的自修改版本吗?