0

我得到了一些具有此功能的遗留代码:

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

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

任何人?

4

4 回答 4

7

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

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

如果 pagina 等于任何值,您将看到 HtmlCode1。如果没有设置,您将看到 HtmlCode2。

我只是尝试确认这一点,并且?pagina=somethingelse不会显示 HtmlCode2

于 2008-12-30T22:48:44.483 回答
4

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

if (isset($_GET['pagina']) && ($_GET['pagina'] == "homepage")) {
}
于 2008-12-30T22:49:50.970 回答
3

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

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

有关文档中有关它的更多详细信息,请参阅:
http://php.net/manual/en/language.operators.comparison.php
http://ca3.php.net/manual/en/types.comparisons.php(特别是“与 == 表的松散比较)

于 2008-12-30T22:53:25.067 回答
0

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

  • Isset 在某个地方被重新定义了吗?
  • 它是PHP的自我修改版本?
于 2008-12-30T22:51:42.353 回答