题
我得到了一些传统的代码这样的:
<?PHP
if(isset($_GET['pagina'])=="homepage") {
?>
HtmlCode1
<?php
} else {
?>
HtmlCode2
<?php
}
?>
我不知道为什么但是这似乎是工作。该htmlcode1装当我有吗?pagina=的主页和htmlcode2装载时pagina var不存在,或是别的东西(还没有真正见过别的东西,只是没有).该网站是使用。php4(不知道确切的版本)。但是真的,这怎么工作的?我看过的手册和说isset返回bool..
任何人吗?
解决方案
问题在于“==”不是类型敏感的比较。任何(非空)字符串都是“相等”的。布尔值为true,但不是相同(因为你需要使用“===”运算符)。
一个简单的例子,为什么你会看到这种行为:
http: //codepad.org/aNh1ahu8
有关文档的更多详细信息,请参阅:
http://php.net/manual/en/language.operators.comparison.php
http://ca3.php.net/manual/en/types.comparisons.php (与==的松散比较“具体表”
其他提示
isset()
返回true或false。在布尔比较中,&quot; homepage&quot;
将评估为 true
。所以基本上你来到这里:
if ( isset( isset()
返回true或false。在布尔比较中,&quot; homepage&quot;
将评估为 true
。所以基本上你来到这里:
<*>
如果pagina等于任何东西,你会看到HtmlCode1。如果未设置,您将看到HtmlCode2。
我刚尝试确认这一点,然后转到?pagina = somethingelse
不显示HtmlCode2。
GET['pagina']) == true )
如果pagina等于任何东西,你会看到HtmlCode1。如果未设置,您将看到HtmlCode2。
我刚尝试确认这一点,然后转到?pagina = somethingelse
不显示HtmlCode2。
我怀疑这是一个错误,因为将“true / false”与“主页”进行比较并不合理。我希望代码实际上应该是:
if (isset(我怀疑这是一个错误,因为将“true / false”与“主页”进行比较并不合理。我希望代码实际上应该是:
<*>GET['pagina']) && (我怀疑这是一个错误,因为将“true / false”与“主页”进行比较并不合理。我希望代码实际上应该是:
<*>GET['pagina'] == "homepage")) {
}
一些想法如何这样可以工作(除了从前面提到的"网页"==true):
- Isset已被重新定义的某个地方?
- 这是一个自我修改过的版本的PHP?