PHPの条件分岐if文で使える関数issetやemptyなどの特徴と違いは?
こんにちは。あきのりです。
21歳でニートに転落しつつも、プログラミングと英語を勉強しながらなんとか生きています。
今回のテーマは「PHPのissetやemptyってどう違うの?」です。
よくif文などでこれらが使われるんですが、これ関連の関数が4つくらいあったり、それぞれで微妙に違ったりと厄介なんですよね。
調べてると「if($var)
と!empty($var)
が同じじゃん!」という疑問も浮かんでくるわけです。
ここには重要な違いが隠されているのでそれも同時に解説していきます。それではいきましょう。
値があるかないかを調べる関数は4つあります
まず、変数に値があるかないかを調べるための関数が主に4つあります。
if($var)
isset($var)
empty($var)
is_null($var)
最初のは厳密には関数ではないんですが、変数の値の有無を調べるという点で関数とみなして紹介してます。
(そもそも、これら関数はif文でしか用途がないので)。
それぞれ、値があるかないかを判断し、true
だったりfalse
だったりを返します。
それぞれにちょっと違いがあるので、よく見る早見表を紹介します。(引用)
こちらのサイトから早見表をもってきました。
それぞれが微妙に違っていますが、
if($var)
とempty($var)
が相補的isset($var)
とis_null($var)
が相補的
という関係になっています。
実際に使ってみる
ちょっとどうやって使うか見てみます。
<?php
$var = 'My Data';
if(empty($var)) {
echo '代入してください';
}
else {
echo $var;
}
条件分岐で値がなければ(empty($var)
がtrue
なら)「代入してください」と表示し、値があればその変数の値を表示します。
今回の場合は”My Data”という値がありますから、この文字列が表示されます。
こんな感じで条件分岐によって処理を変えたいときによく使われます。’値がありません’
if($var)とempty($var)って2つも必要?
ここまでは簡単なんですが、1つ疑問がありますよね?
実際、さっきの早見表を見ても、この2つは相補的なわけですから、2つもいらないように思えます。
例えばempty($var)
と!empty($var)
で事足りるというわけです。
(ちなみに!
は「反対」という意味で、true
とfalse
が逆になる)
ただ、2つあるのには理由があって、この違いが結構重要です。
未定義変数がエラーになるかどうか
結論を言うと、未定義の変数を扱えるかどうかが違います。
変数は普通何らかの値を代入して「定義」するんですが、たまに定義されていない場合はあります(その場合についてはのちほど)。
この未定義変数が扱いにちょっと苦戦するんですね。
if($var)とempty($var)の違い
例えば、以下のプログラムを実行してみます。
<?php
error_reporting(E_ALL);
$var;
if($var) {
echo $var;
}
else {
echo '値がありません';
}
error_reporting(E_ALL)
ですべてのエラーを表示するようにして、先ほどと同じように、$var
に値があればそれを表示、なければ「値がありません」と表示します。
結果はこんな感じ。
値がありません
「値がありません」と実行はできているんですが、Noticeエラーが出ています。
「7行目のvarという変数に値が入っていません」というエラーです。
7行目というのはif($var)
というところで、ここでエラーが出ていることになります。
では、ちょっとコードを変えてみます。
<?php
error_reporting(E_ALL);
$var;
if(!empty($var)) {
echo $var;
}
else {
echo '値がありません';
}
if($var)
の部分をif(!empty($var))
に変えました。条件は全く同じです。
これらを実行するとこうなります。
先ほどとは違って、エラーが出ていません。
つまり、未定義変数を使う場合
- if($var)だとNotice(注意)が表示される
- empty($var)だとエラーは表示されない
となるんですね。
isset
とis_null
の違い
isset
とis_null
でも同じようなことが言えます。
具体例は出しませんが、結論はこんな感じ。
is_null
だとNotice(注意)が表示されるisset
だとエラーは表示されない
POST
やGET
を使ってデータ送信する際に使える
基本的に、変数が未定義という状態は起こりにくいんですが、よくある例がPOST
などを使ったデータ送信です。
例えば、ページ内で検索をかけるときにデータを送信してそれを受け取り、それを元に処理をすると思います。
<php
$tag = $_POST['tag'];
if($tag) {
//tagを使ってデータを取り出す
}
else {
}
?>
//以降でページを表示(html文)
このようなプログラムを実行するとき、一番最初にこのページにアクセスした場合、最初は何も送信されていないので、$tag
は未定義になってしまいます。
そうすると、先ほどと同じように注意が出てしまいます。
それを避けるために、例えば、以下のようにプログラムを書けます。
<php
$tag = $_POST['tag'];
if(!empty($_POST['tag'])) {
$tag = $_POST['tag'];
//tagを使ってデータを取り出す
}
else {
}
?>
//以降でページを表示(html文)
先ほど見たようにempty
は未定義変数を扱ってもエラーが出ないので、これで先に条件分岐しておけば問題なく実行されます。
まとめ
というわけで、今回は条件分岐に使える関数について解説しました。
さっそくphpを使ってwebサービスやサイトを作ってみましょう。
それでは、また。
スポンサードサーチ
人気記事英語学習用SNSをLaravelで作ってみた【システム解説あり】