2008-12-30 70 views
0

不同的工作我有一些這方面的遺留代碼:難道isset在舊版本

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

我不知道爲什麼,但是這似乎是工作。當我有?pagina = homepage時,htmlcode1被加載,而當pagina var不存在或者是別的東西時,htmlcode2被加載(還沒有真正見過別的東西,只是不存在)。 該網站使用的是php4(不知道確切版本)。 但是真的,這個工作怎麼樣?我看着手冊,它說isset返回一個布爾..

任何人?

回答

3

問題是「==」不是一個類型敏感的比較。任何(非空的)字符串都是「等於」布爾值true,但不是與它相同(爲此,您需要使用「===」運算符)。

一個簡單的例子,爲什麼你看到此行爲:
http://codepad.org/aNh1ahu8

以及有關它的文檔的更多信息,請參見:
http://php.net/manual/en/language.operators.comparison.php
http://ca3.php.net/manual/en/types.comparisons.php(以下簡稱「鬆與比較==「表格專用)

+0

謝謝!這一定是它工作的原因 – AntonioCS 2008-12-30 23:14:58

7

isset()返回true或false。在布爾比較中,"homepage"將評估爲true。所以基本上你來到這裏:

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

如果pagina等於什麼,你會看到HtmlCode1。如果沒有設置,您將看到HtmlCode2。

我剛試過確認這個,去?pagina=somethingelse不是顯示HtmlCode2。

4

我懷疑這是一個錯誤,因爲它與真實/錯誤與「主頁」進行比較沒有任何意義。我希望的代碼實際上應該是:

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

一些想法如何,這可能(從前面提到的「主頁」 ==真開)工作:

  • Isset已經被重新定義的地方?
  • 這是一個PHP的自修改版本?