PHPのisset()と!empty()の違いとは?挙動の違いと使い分けのポイントを解説
PHPには変数の状態を判定するための関数としてisset()とempty()があります。一見似ていますが、判定基準や返り値が異なるため、用途に応じた使い分けが重要です。この記事では、それぞれの仕組みとコード例、そして両者の違いをわかりやすく解説します。
isset()関数とは
isset()は、変数が「設定されているかどうか」をチェックする関数です。具体的には、変数が存在し、かつNULL以外の値を持っている場合にTRUEを返します。
ポイントは、""(空文字列)、0、"0"、FALSEといった一見「空っぽ」に見える値でも、NULLさえなければ「設定済み」とみなされ、TRUEが返るという点です。また、配列のキーやオブジェクトのプロパティに対しても使用できます。
isset()のコード例
<?php
$val = '0';
if( isset($val)) {
print_r(" $val is set with isset function <br>");
}
$my_array = array();
echo isset($my_array['New_value']) ?
'array is set.' : 'array is not set.';
?>
出力結果
0 is set with isset function array is not set.
この例では、$valに文字列"0"が代入されているためisset()はTRUEを返し、メッセージが出力されます。一方、空の配列$my_arrayには'New_value'というキーが存在しないため、FALSEとなり「array is not set.」が表示されます。
!empty()とは
empty()は、変数が「空であるかどうか」をチェックする関数です。「空」と判定されるのは以下の値です。
""(空文字列)0(整数)0.0(浮動小数点数)"0"(文字列)NULLFALSEarray()(要素が1つもない空の配列)- 宣言のみで値が代入されていないクラス内の変数
先頭に!を付けた!empty()は、「変数が空ではない」場合にTRUEを返します。そのため、フォーム入力値などが「実質的に有効な値を持っているか」を確認したい場面でよく使われます。
!empty()のコード例
<?php
$temp_val = 0;
if (empty($temp_val)) {
echo $temp_val . ' is considered empty';
}
echo "nn";
$new_val = 1;
if (!empty($new_val)) {
echo $new_val . ' is considered set';
}
?>
出力結果
0 is considered empty 1 is considered set
0はPHPにおいて「空」と判定されるためempty()はTRUEとなり、逆に1は空ではないため!empty()がTRUEになります。
isset()とempty()の違いを比較表で確認
代表的な値に対して、両関数がどのような結果を返すかを整理すると以下のようになります。
| 値の種類 | isset($var) | empty($var) |
|---|---|---|
""(空文字列) | TRUE | TRUE |
0 / "0" / 0.0 | TRUE | TRUE |
FALSE | TRUE | TRUE |
array()(空の配列) | TRUE | TRUE |
NULL | FALSE | TRUE |
| 未定義の変数 | FALSE(警告なし) | TRUE(警告なし) |
1 / "abc" など有効な値 | TRUE | FALSE |
使い分けのポイント
isset()は「変数自体が存在するか」を確認したいときに使います。NULLだけを除外して判定できるため、配列のキーの存在チェックや、意図的に0や空文字列を扱う処理に向いています。
一方、!empty()は「意味のある値が入っているか」を確認したいときに使います。0や空文字列も無効とみなせるため、フォームの必須入力チェックなどで便利です。ただし、「0」という入力が正当な値になるケースでは誤判定につながるので注意が必要です。
-
DirectX11とDirectX12の違いを徹底解説!ゲーマーが知っておくべきポイント
DirectXは、ソフトウェアがマルチメディアコンテンツを描画し、グラフィックハードウェアと通信するために使用されるAPI(アプリケーションプログラミングインターフェース)のコレクションです。DirectXの主要な構成要素であるDirect3Dは、ソフトウェアとグラフィックスハードウェア間の通信を担っています。ハードウェアは製品ごとに異なるため、標準化された関数や呼び出しのライブラリを通じてグラフィックカードと通信することで、ゲーム開発を大幅にスピードアップできます。これは「ハードウェア抽象化」と呼ばれ、APIの最も重要な役割となっています。車に例えてみましょう。1台の車の運転ができれば、ほぼ
-
Pythonのセット演算入門|演算子とメソッドの違いを徹底解説
Pythonのセット(set)は、重複しない要素を管理するための組み込みデータ型です。和集合・積集合・差集合・対称差といった集合演算は、対応するメソッドを呼び出す方法と演算子を使う方法の2通りで実行できます。この記事では、それぞれの具体的な書き方と、両者の違いについて解説します。 和集合(Union) union() メソッドを使う場合 >>> s1 = {1, 2, 3, 4, 5} >>> s2 = {4, 5, 6, 7, 8} >>> s1.union(s2) {1, 2, 3, 4, 5, 6, 7, 8} >>&