• ベストアンサー

if文の$_COOKIEの処理について

if文の「$_COOKIE」の処理について質問させてください。 3つのif文の処理は同じだと思いそれぞれ使いって みると多少違いがあるようなのですが、その違い がよく分かりません。PHP4の場合はとはちょっと 様子が違うみたいです。 (1) if($_COOKIE['XXXXXXX']) (2) if(isset($_COOKIE['XXXXXXX'])) (3) if($_COOKIE['XXXXXXX']!="") 環境:PHP5 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nicolish
  • ベストアンサー率72% (13/18)
回答No.1

マニュアルを読みましょう。マニュアルには全てが書いてあります。どんな書籍よりも役に立ちます。 (1)は、$_COOKIE['XXXXXXX']の値をboolに型変換し、その結果を判定します。 従って、$_COOKIE['XXXXXXX']の中身が「文字列の"0"」「空文字列」などの時、不成立となります。また、$_COOKIE['XXXXXXX']が未定義の時(要はそんな名前のクッキーが送られていない時)も不成立(NOTICEレベルのエラー)になります。その他の文字列の場合は全て成立します。 (2)は、$_COOKIE['XXXXXXX']が未定義の時に不成立となり、それ以外の場合は成立します。未定義でもNOTICEは出ません。空文字列でも成立します。 (3)は、文字列に変換した時に空文字列でないならば成立します。不成立となるのは、未定義の時、空文字列の時です。"0"は成立になります。 一応まとめると ・未定義の時=そんな名前のクッキーが無い時  1はNOTICEが出つつ不成立、2は不成立、3はNOTICEが出つつ不成立 ・あるけど、中身が文字列"0"の時  1は成立、2,3は不成立 ・空文字列の(つまり、クッキーの名前だけ送られてきて値は空だった)時  1は不成立、2は成立、3は不成立 ・それ以外のすべての文字列の時  1,2,3すべて成立 です。 「クッキーが送られてきているか?」を判定するならば if(isset($_COOKIE['XXXXXXX']) && $_COOKIE['XXXXXXX'] != "") がスマートだと思います。漏れも無く、NOTICEも出ません。

ccgp
質問者

お礼

nicolishさん 回答ありがとうございます。 とても参考になりました!!!! if構文の判定以前のもっとも基本的なことが理解できていませんでした。 やはり基本が大切ですね。 基本的な部分からマニュアルを読んでみます。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

バージョンの違いよりエラー出力の影響が濃そうですが、ザックリ (1) if( $_COOKIE['XXXXXXX'] ) $_COOKIE['XXXXXXX']が真であるか。未定義なら警告 (2) if( isset($_COOKIE['XXXXXXX']) ) $_COOKIE['XXXXXXX']が定義済みであるか。nullでも定義されていれば真 (3) if( $_COOKIE['XXXXXXX'] != "" ) $_COOKIE['XXXXXXX']が真であるか。未定義なら警告 (4) if( $_COOKIE['XXXXXXX'] !== "" ) $_COOKIE['XXXXXXX']が文字列""以外であるか。未定義なら警告 (5) if ( !empty($_COOKIE['XXXXXXX']) ) $_COOKIE['XXXXXXX']が空以外であるか。未定義なら偽 まとめ 0 や "0" や "" や null を有効な値として扱う場合は、if ($a) など曖昧な判定はやめとく。 定義してるか分かんない変数は isset や empty で警告をさける。

ccgp
質問者

お礼

tany180sxさん 回答ありがとうございます。 ノウハウをありがとうございます。 判断するの参考になりました!!!!

すると、全ての回答が全文表示されます。

関連するQ&A