dポイントプレゼントキャンペーン実施中!

if (isset($_POST["body"]) && $_POST["body"])の中の&& $_POST["body"]って必要ですか?
PHPのプログラムを読んでいて、以下のような部分を見つけました
if (isset($_POST["body"]) && $_POST["body"])

しかし、どうせisset($_POST["body"])でnullかどうか、値が入っているかどうかを確めているので、&& $_POST["body"]の部分は必要ないように思います。なぜこのような書き方をしているのでしょうか?

A 回答 (3件)

 isset($_POST["body"])では値が入っているかどうかを調べていますが、値が何であるかは問いません。

その値を判定しているのが二つ目の式です。
 PHPの論理判定では値が0の時に偽になり、それ以外の時は真になります。つまり、$_POST["body"]の値が0かどうかを判定しています。($_POST["body"] != 0)と同じです。

 判定式全体では、$_POST["body"]に0以外の値が入っている時に真になり、値が入っていないか0の時に偽になります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
わかりました。Rubyとは違うんですね。

お礼日時:2010/11/08 17:33

もし未定義の変数(メモリ上に確保されていない)を直接if文で評価したら


設定によっては警告がでてしまいます。

そこで関数ではない言語構造であるisset()やempty()で評価することで警告を回避できます。

if ($foo) ←これは未定義なので警告を出す
$foo = null; // null値を含むなんらかの値を代入すると定義(メモリ確保)された状態になる

if ($foo) ←これで警告を出さなくなる
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
nullを含むんですか?nullにそんな使い方が出来るとは知りませんでした。

お礼日時:2010/11/08 18:06

isset() は、変数がセットされていること、そして NULL でないことを検査します。


http://jp.php.net/manual/ja/function.isset.php

ここで言うところの NULL とは、PHPの定数 NULL です。
http://jp.php.net/manual/ja/language.types.null. …

例えば、$_POST['body'] の内容が空文字であったとしても、isset() は TRUE となってしまうでしょう。

そこで変数が空であるかどうかを検査する必要があるのですが、これには empty() を使います。
http://jp.php.net/manual/ja/function.empty.php

変数がセットされており、値が空ではないことを確認したい場合、以下のように記述することをお勧めします。
if (isset($_POST['body']) and !empty($_POST['body'])) { /* 変数に対する処理を記述 */ }
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
empty()の勉強になりました。

お礼日時:2010/11/08 17:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!