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()true または false を返します。ブール比較で"homepage"は、 と評価されtrueます。したがって、本質的にここにたどり着きました:

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

pagina が何かに等しければ、HtmlCode1 が表示されます。設定されていない場合は、HtmlCode2 が表示されます。

これを確認するために試してみたところ、HtmlCode2が表示され?pagina=somethingelseません。

于 2008-12-30T22:48:44.483 に答える
4

true/false を「ホームページ」と比較するのは本当に意味がないので、バグだと思います。コードは実際には次のようになると思います。

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

問題は、「==」がタイプセンシティブな比較ではないことです。任意の (空でない) 文字列はブール値の true と「等しい」が、それと同一ではない (そのためには「===」演算子を使用する必要がある)。

この動作が見られる理由の簡単な例:
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 に答える