Php iSet在旧版本中的工作方式是否不同

Php iSet在旧版本中的工作方式是否不同,php,legacy-code,Php,Legacy Code,我得到了一些遗留代码,其中包含以下内容: <?PHP if(isset($_GET['pagina'])=="homepage") { ?> HtmlCode1 <?php } else { ?> HtmlCode2 <?php } ?> HtmlCode1 HtmlCode2 我不知道确切的原因,但这似乎奏效了。当我有?pagina=homepage时加载htmlcode1,当pagina var不存在或是其他东西时加载htmlcode

我得到了一些遗留代码,其中包含以下内容:

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

HtmlCode1
HtmlCode2
我不知道确切的原因,但这似乎奏效了。当我有?pagina=homepage时加载htmlcode1,当pagina var不存在或是其他东西时加载htmlcode2(没有真正看到其他东西,只是不存在)。 该网站正在使用php4(不知道确切版本)。 但真的,这怎么行?我看了手册,上面说isset返回一个布尔

任何人?

isset()
返回true或false。在布尔比较中,
“homepage”
将计算为
true
。所以基本上你在这里:

if ( isset($_GET['pagina']) == true )
如果pagina等于任何值,您将看到HtmlCode1。如果没有设置,您将看到HtmlCode2


我只是试着用它来确认这一点,然后转到
?pagina=somethingelse
不显示HtmlCode2。

我怀疑这是一个bug,因为将真/假与“主页”进行比较是没有意义的。我希望代码实际上应该是:

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

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

  • Isset在什么地方被重新定义了
  • 这是PHP的自我修改版本
    • 问题在于“==”不是类型敏感的比较。任何(非空)字符串都“等于”布尔值true,但与之不完全相同(为此需要使用“==”运算符)

      一个简单的例子,为什么会出现这种行为:

      有关文档中的详细信息,请参阅:

      (特别是“与==”的松散比较表)