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,但与之不完全相同(为此需要使用“==”运算符)
一个简单的例子,为什么会出现这种行为:
有关文档中的详细信息,请参阅:
(特别是“与==”的松散比较表)