Search

検索したいワードを入力してください

2019年02月04日

【PHP入門】empty関数の使い方とisset関数との違い

PHP変数に値が入っているかどうかを判定するのに使用されることが多いempty関数とisset関数。それぞれ使い方や特徴があります。でもどのように使い分けたらいいのか迷う方も多いのでは?empty関数とisset関数の違いを解説します!

PHPのempty関数とは

empty関数はPHPの変数や配列が「空」であるかどうかをチェックする関数です。主にif文の条件文で使用されます。引数に指定した変数が「空」であれば「true」を返し、そうでなければ「false」を返します。

empty関数のメリット

PHPのempty関数は変数が存在しない場合にもエラーを出さないというメリットがあります。

例えば、ページ間の値の受け渡しに使用されるPOST配列やGET配列。これらの変数は前のページからPOSTメソッド、GETメソッドで値が送信されなければ作成されません。

このような変数が存在しないときもempty関数は警告文を出すことなく、falseを返してくれます。

empty関数のデメリット

 PHPのempty関数は以下の場合にも変数を空とみなすため、注意が必要です。

  • 空文字「“”」
  • 数値の0「0」「0.0」
  • 文字列の0「“0”」
  • NULL
  • FALSE
  • 空の配列array()

 空文字以外にもtrueを返してしまうため、意図せずに変数が「空」と判断されてしまいます。

empty関数の使い方

empty関数の基本構文

empty(空かどうかを調べたい変数)

PHPのempty関数の引数には空か否かを調べる変数を設定します。

以下はempty関数を使用して、変数$valの空の判定をしている例です。

<?php
$val = '';
if(empty($val)){
echo '$valは空です';
} else {
echo '$valは空ではありません';
}
?>

出力結果
$valは空です

変数が数値の場合のempty関数の使い方

調べる変数が数値のとき、empty関数の引数に変数を指定します。ただし、設定する変数に代入される数値を確認しましょう。

PHPのempty関数は「0」や「0.0」といった数値の0が代入された変数の場合もtrueを返します。

以下の例を見てみましょう。



<?php
$num1 = 0;
$num2 = 0.0;
$num3 = 1;
if(empty($num1)){
echo ’$num1は空です’;
}else{
echo ’$num1は空ではありません’;
}
if(empty($num2)){
echo ’$num2は空です’;
}else{
echo ’$num2は空ではありません’;
}
if(empty($num3)){
echo ’$num3は空です’;
}else{
echo ’$num3は空ではありません’;
}
?>

出力結果
$num1は空です
$num2は空です
$num3は空ではありません

数値の0が代入されたnum1、num2ではempty関数により「空」と判断されてtrueを返し、if文の中の「空です」の出力が行われています。

一方、1が入力されたnum3は「空でない」と判断されてfalseを返し、「空ではありません」と出力されています。

文字列の場合の使い方

調べたい変数が文字列のときも数値の場合と同様、empty関数の引数に変数を指定します。文字列の場合も変数に代入される値を確認しておかなければなりません。empty関数は空文字「””」の他に、文字列としての「”0”」も空としてみなしてしまいます。

以下の例を見てください。



<?php
$str1 = "";
$str2 = "0";
$str3 = "こんにちは";
if(empty($str1)){
echo ’$str1は空です’;
}else{
echo ’$str1は空ではありません’;
}
if(empty($str2)){
echo ’$str2は空です’;
}else{
echo ’$str2は空ではありません’;
}
if(empty($str3)){
echo ’$str3は空です’;
}else{
echo "$str3は空ではありません";
}
?>

出力結果
$str1は空です
$str2は空です
$str3は空ではありません

変数$str1は空文字「""」なのでempty関数は「空」と判断し、「$str1は空です」の出力処理を行っています。

変数$strは文字列の「"0"」ですが、empty関数は文字列で表現された0も「空」と認識するため、「$str2は空です」の出力となっています。$str3は文字列’Hello'なので、空でないと判断され、「$str3は空ではありません」の出力処理が行われています。

emptyの代わりにIFを使うこともできる

 PHPにおいて、empty(変数)は実は以下のように書き換えることができます。

 !変数

 例えば以下の2つの記述は同じ意味です。

  • if(empty($hoge)){ echo "ほげ"; }
  • if(!$hoge){ echo "ほげ"; }

empty関数ばかり使った時の課題点

PHPのempty関数は「空」と判断する変数の値が多いです。意図せずに変数を「空」と判断することもあるため、注意が必要です。

また、「空」判定されたとはいえ、変数の中身が空文字「""」であるかどうかの判定はできません。それから変数が未定義の場合やNULL値であった場合も全て「空」と判断するので、変数が未定義かどうか、またNULLかどうかの判定をすることができません。

配列、変数の空白確認に関する他の関数

PHPの配列や変数の空白に関連するその他の関数を紹介します。

変数がNULLかどうかを判定するis_null関数

is_null関数
引数に指定した変数、配列にNULLが入っている場合に「true」、そうでない場合に「false」を返します。

PHPでは、empty関数と後述のisset関数は変数が未定義かどうか、もしくは変数にNULLが代入されているかどうかを判断することができません。is_null関数は変数が未定義あるいはNULLであるかどうかをチェックすることのできる関数です。

以下の例を見てみましょう。

<?php
$val1 = NULL;
$val2 = 1;

if(is_null($val1)){
echo '$val1はNULLです';
}else {
echo '$val1はNULLではありません';
}
if(is_null($val2)){
echo '$val2はNULLです';
}else {
echo '$val2はNULLではありません';
}
if(is_null($_POST['hoge'])){
echo '$_POST['hoge']はNULLです';
}else {
echo '$_POST['hoge']はNULLではありません';
}
?>

出力結果
$val1はNULLです
$val2はNULLではありません
$_POST['hoge']はNULLです

$val1にはNULLが代入されているので、is_null($val1)の戻り値はtrueとなり、「NULLです」の出力処理が行われています。$val2には数値の1が入っており当然NULLではないので、is_null($val2)の判定はfalseとなり、「NULLではありません」の出力結果となっています。

PHPにおいて、$_POST['hoge']はPOSTメソッドでこのページに「hoge」の名前で値を送信していない限り、存在しえない変数です。よって未定義変数ということになるので、is_null($_POST['hoge'])の戻り値はtrueとなります。

配列のから要素を消すarray_filter関数

array_filter関数
引数に指定した配列の中の空要素が格納された要素を排除する関数です。ここで空要素と判定されるのは、empty関数と同じ、数値の0、空文字""、文字列の"0"、NULL、falseです。

以下の例では「Hello」と「1」以外の値の要素は空要素と判断され、排除されています。

<?php
$arr = [ 'Hello', false, null, 0, '' , 1];

$arr_filtered = array_filter($arr);
print_r($arr_filtered);
?>

出力結果
Array( [0] => Hello [5] => 1)

配列を空にするunset関数

unset関数
引数に指定した配列を空にします。

以下の例では、配列$arrに値が設定されたのち、unset関数で値が消去されています。

<?php
$arr = ['a', 'b', 'c', 'd', 'e'];

unset($arr[1]);
unset($arr[3]);

print_r($arr);
?>

出力結果
Array( [0] => a [2] => c [4] => e)

unset関数により、$arr[1]と$arr[3]の要素の値が消去されていることが分かります。

isset関数とは

PHPのisset関数は変数に値がセットされているかをチェックする関数です。変数に値が入っているとtrueを返し、値が空あるいはNULLのときはfalseを返します。empty関数と同様、if文の条件判断に利用されます。

isset関数の使い方

基本構文は「isset(調べたい変数)」です。以下の例を見てみましょう。

<?php
$greeting = "Hello!";
if(isset($greeting)){
echo $greeting;
}
?>

出力結果
Hello!

変数$greetingには「Hello!」という文字列がセットされているのでif文の中の出力処理が実行されています。

empty関数との違い

PHPにおいてもif(!isset($value))のように、isset関数の頭に否定の「!」をつければ値が空であることを判定することができます。ただし、isset関数はempty関数と違い、数値の0や文字列の“0”、空文字“”も値が設定されているとみなします。

以下の例を見てみましょう。

<?php
$str1 = "";
if(!isset($str1)){
echo '$str1は空です(isset関数)';
} else {
echo '$str1は空ではありません(isset関数)';
}
if(empty($str1)){
echo '$str1は空です(empty関数)';
} else {
echo '$str1は空ではありません(empty関数)';
}

<?php
$str2 = "0";
if(!isset($str2)){
echo '$str2は空です(isset関数)';
} else {
echo '$str2は空ではありません(isset関数)';
}
if(empty($str2)){
echo '$str2は空です(empty関数)';
} else {
echo '$str2は空ではありません(empty関数)';
}

$num = 0;
if(!isset($num)){
echo '$numは空です(isset関数)';
} else {
echo '$numは空ではありません(isset関数)';
}
if(empty($num)){
echo '$numは空です(empty関数)';
} else {
echo '$numは空ではありません(empty関数)';
}
?>

出力結果
$str1は空ではありません(isset関数)
$str1は空です(empty関数)
$str2は空ではありません(isset関数)
$str2は空です(empty関数)
$numは空ではありません(isset関数)
$numは空です(empty関数)

PHPのisset関数では空文字""や文字列の"0"、数値0は値がセットされていると判断し、「if(!isset(変数))」の条件により空ではないと判断されています。

一方、empty関数では空文字""と数値0を「空」と判断しています。

まとめ

いかがだったでしょうか。いずれもPHPで変数や配列を「空」と判断するのに使用される、似たような機能を持つ関数ですが、特徴が異なるため注意が必要だということがお分かりいただけましたか。

2つの関数の違いのポイントを押さえて、ぜひ使いこなしてみてください。

【PR】多くの人がプログラミングを諦めてしまう理由をご存知ですか?



近年プログラミングを勉強する人が増えています。

プログラミング学習者の多くは独学から取り組もうとしますが、だいたい80%ほどは3ヶ月も続かずに諦めてしまいます。早い人は1日目で。

多くの人がプログラミングを独学しようとして諦める理由は、次の3つ。
●モチベーションが維持できない
●エラーの原因・解決方法が分からない
●どう学習すればよいか分からない

TechBoostというプログラミングスクールでは、みんなと一緒にプログラミングをするのでモチベーションの維持ができ、分からないことがあればマンツーマンで教えてくれ、徹底的に研究された初心者向けの教材が揃っています。

TechBoostを卒業後、実際にエンジニアとして転職した方もいるほど。

本気でプログラミングを学びたい方は、一度無料のカウンセリングでご相談ください。プログラミングを嫌いになる前に。

tech boostについて

オーダーメイド型の学習コンテンツを提供する「tech boost」 は、エンジニアのキャリア支援に特化したサービスを複数展開している株式会社Branding Engineerが運営しているプログラミングスクールです。最短3ヶ月間で、未経験から『プログラミングの基礎』、『実際に業務で必要となるスキル』、『今のトレンドとなっている知識』まで学べ、ご希望の方にはプロのキャリアアドバイザーによる就業支援を行うことができます。

tech boost卒業生インタビュー

tech boostの卒業生の声を聞きました。あなたがプログラミングを学びたい理由を、一度考えてみてください。
営業→Javaエンジニア→Rubyエンジニアと転向し、第一志望のFinTech企業で働く山下さん
元営業、ビジネスのわかるエンジニアを目指す菅原さん
サンフランシスコに交換留学し、シリコンバレーのVCでインターン中の梅本さん
予備校の営業から半年でエンジニア転職を果たした小田島さん

tech boostの口コミ



Related