質問
次のようなレガシーコードを入手しました:
<?PHP
if(isset(次のようなレガシーコードを入手しました:
<*>
正確な理由はわかりませんが、これは機能しているようです。 ?pagina = homepageがある場合はhtmlcode1がロードされ、pagina varが存在しないか、何か他のもの(実際には他の何かと一緒に見たことがありません。
Webサイトはphp4を使用しています(正確なバージョンはわかりません)。
しかし、本当に、これはどのように機能しますか?マニュアルを見たところ、issetはboolを返すと言っています。
誰ですか?
GET['pagina'])=="homepage") {
?>
HtmlCode1
<?php
} else {
?>
HtmlCode2
<?php
}
?>
正確な理由はわかりませんが、これは機能しているようです。 ?pagina = homepageがある場合はhtmlcode1がロードされ、pagina varが存在しないか、何か他のもの(実際には他の何かと一緒に見たことがありません。 Webサイトはphp4を使用しています(正確なバージョンはわかりません)。 しかし、本当に、これはどのように機能しますか?マニュアルを見たところ、issetはboolを返すと言っています。
誰ですか?
解決
問題は、&quot; ==&quot;型依存の比較ではありません。 (空ではない)文字列はすべて「等しい」ブール値trueに、ただし同一ではありません(そのためには&quot; ===&quot;演算子を使用する必要があります)。
簡単な例、この動作が見られる理由:
http: //codepad.org/aNh1ahu8
ドキュメントの詳細については、次を参照してください:
http://php.net/manual/en/language.operators.comparison.php
http://ca3.php.net/manual/en/types.comparisons.php (==との緩やかな比較&quot; table特に)
他のヒント
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")) {
}
これがどのように機能するかのアイデア(前述の&quot; homepage&quot; == trueを除く):
- どこかで再定義されましたか?
- PHPの自己修正バージョンですか?