MENU
Reina
エンジニア兼webライター
大学卒業後、食品企業の品質管理業務に4年半務める。

仕事と並行してプログラミングスクールで学習開始、見事未経験からエンジニア転職に成功しました。

現在は受託企業にてPHPエンジニアとして就業しています。

本業の傍ら、webライターとしても活動しています。
ブログ名変更しました「Reinaのエンジニアブログ」⇒「0エンブログ」

PHPのisset、empty、is_nullの違いは?注意点も一緒にご紹介します【初心者は抑えておこう】

当ページのリンクには広告が含まれています。

PHPの「isset」「empty」「is_null」の特徴や違いがわからない、そんな方はいないでしょうか?

これら3つの関数は一見似ていますが、ちゃんと違いがあります。

今回はPHPエンジニアとして日々PHPを用いたシステム開発している筆者が、それぞれの関数の使い方や違いをわかりやすく解説します。

変数の存在確認や空かどうかのチェックを適切に行えるようになれば、PHPのエラー対策やフォーム処理が格段に向上します。

早見表と実践的なコード例を用いて、あなたのPHPスキルを一段階アップさせましょう。

この記事でわかること
  • isset・empty・is_nullの特徴や違い
  • 実際に使用した例文
  • 使用する際の注意点

そもそもPHPって何ができる?PHPについてまとめた記事もあるので是非ご覧ください。

目次

isset、empty、is_nullの早見表

isset、empty、is_nullの早見表
Reina

早速ですが、この3つの違いが知りたいです!

この3つの関数は、一見どれも同じ機能を果たしており、存在するのかしないのかを確認する関数だと思う方もいるでしょう。

まずは3つの関数の違いを一目で理解できる比較表をご覧ください。

スクロールできます
関数主な用途戻り値がtrueになる場合特徴
isset()変数が定義されており、nullでないことを確認変数が存在し、nullでないエラーを発生させずに未定義変数もチェック可能
empty()変数が「空」と見なせるかを確認変数が未定義・null・false・0・”0″・””・array()幅広い値を「空」と判定
is_null()変数がnullかどうかを確認変数がnullである未定義変数に使用するとエラーになる
Reina

それぞれ違いがあるんですね!

これら3つの関数はそれぞれ異なる目的で使い分ける必要があります。

次より各3つについて、trueで返ってくる場合と、falseで返ってくる場合の両方を合わせて解説します。

issetとは?

Reina

まずはissetについて詳しく知りたいです。

issetは、変数が定義されていて、かつnull以外の値が設定されているかどうかを確認する関数です。

変数が存在し、nullでない場合にtrue、それ以外の場合はfalseを返します。

$username = "tanaka";

var_dump(isset($username)); // bool(true) 存在しているためtrueで返す

$age = null;

var_dump(isset($age)); // bool(false) nullのためfalseで返す

var_dump(isset($undefined_variable)); // bool(false) 変数が未定義だがエラーにならない

フォーム送信後のデータチェックやAPIからのレスポンス処理など、変数の存在確認によく使われます。

issetは未定義の変数をチェックしてもエラーにならないため、安全に変数の存在確認ができる便利な関数です。

emptyとは?

emptyとは?
Reina

次にemptyについて詳しく知りたいです。

emptyは変数が「空」と見なせる値かどうかをチェックする関数です。

以下はempty関数を用いると「空」と判定される項目です。

emptyを使うと「空」と判定される項目
  • 未定義変数
  • null
  • false
  • 整数の「0」
  • 文字列の「’0’」
  • 空文字列・空配列

ユーザー入力の必須チェックや、配列が空かどうかの確認などによく使われます。

$username = "";
var_dump(empty($username)); // bool(true) 空文字列のため、trueで返す

$scores = [];
var_dump(empty($scores)); // bool(true) 空配列のため、trueで返す

$age = 0;
var_dump(empty($age)); // bool(true) 0は「空」と判定される

$null = null
var_dump(empty($null)); // bool(true) nullは「空」と判定される

var_dump(empty($undefined_variable)); // bool(true) 変数が定義されていなくてもエラーにならない
Reina

issetではnullだとfalseで返ってきますが、emptyはtrueで返ってくるんですね。

emptyもissetと同様に未定義変数でもエラーにならないため、安全に使用できます。

PHPの配列って何?ややこしくてわからない!そんな方に向けた記事もご用意しています!

is_nullとは?

is_nullとは?
Reina

最後にis_nullについて知りたいです!

is_nullは変数がnull値かどうかだけをチェックする関数です。

変数がnullの場合にtrueを返し、それ以外の値ではfalseを返します。

$value = null;
var_dump(is_null($value)); // bool(true) nullなのでtrueが返ってくる

$name = "";
var_dump(is_null($name)); // bool(false) 空文字はnullではないためfalseがかえってくる

var_dump(is_null($undefined_variable)); // Notice: Undefined variable 定義されていないためエラー
Reina

is_nullは未定義変数の場合、エラーが出てしまいました。

データベースからのnull値チェックや、明示的にnullかどうかだけを判定したい場合に使います。

ただし、is_nullは未定義の変数に対して使用するとエラーが発生するため注意が必要です。

isset、empty、is_nullの使い方(例文)

Reina

3つの違いについてわかりました!でも実際の例文があるともっとわかりやすいなぁ…

前の章まではそれぞれ3つの違いや特徴、trueで返ってくる場合やfalseで返ってくる場合について説明しました。

ですが、Webアプリやシステムを開発を行っている方にとっては、具体的な例文があると分かりやすいでしょう。

それぞれの関数の具体的な使い方について、次で例を交えてご紹介していきます。

issetを使った例文

まずはissetを使った例文です。

// 1:フォームから送信されたデータの存在チェック
if (isset($_POST['username'])) {
    $username = $_POST['username'];
    echo "ようこそ、{$username}さん";
} else {
    echo "ユーザー名を入力してください";
}

// 2:連想配列のキーが存在するかチェック
$user = [
    'name' => '田中太郎',
    'email' => 'tanaka@example.com'
];

if (isset($user['age'])) {
    echo "年齢: {$user['age']}歳";
} else {
    echo "年齢情報がありません"; // こちらを呼び出す
}

// 3:複数の変数を同時にチェック
if (isset($first_name, $last_name, $email)) {
    // すべての変数が定義されており、nullでない場合の処理
    register_user($first_name, $last_name, $email);
}

まず1つ目は、入力フォームを使った例文です。

name属性「’username’」の入力フォームに名前が入力された場合は「ようこそ、○○さん」と返すのに対し、入力がない場合は「ユーザー名を入力してください」と返します。

2つ目は配列のキーが存在するかのチェックです。

連想配列$useのキー「’age’」がある場合は「年齢:○○歳」と返すのに対し、ない場合は「年齢情報がありません」と返します。

Reina

今回はキーに「’age’」が無いので「年齢情報がありません」が返ってきます。

3つ目は複数の変数の同時チェックです。

$first_name・$last_name・ $email3つの変数が存在する場合、「register_user」という関数を呼び出します。

emptyを使った例文

次はemptyを使用した実践的な例を見てみましょう。

// 1:必須入力項目のチェック
if (empty($_POST['email'])) {
    $errors[] = "メールアドレスは必須項目です";
}

// 2:配列が空かどうかのチェック
$results = search_database($keyword);
if (empty($results)) {
    echo "検索結果がありませんでした";
} else {
    foreach ($results as $result) {
        // 結果の表示処理
    }
}

// 3:条件分岐での活用
$message = empty($username) ? "ゲスト" : $username;
echo "ようこそ、{$message}さん";

// if文で置き換え
if (empty($username)) {
    $message = "ゲスト";
} else {
    $message = $username;
}
echo "ようこそ、{$message}さん";

こちらも1つ目は入力フォームを使った例文です。

name属性「’email’」の入力フォームにメールアドレスが入力されていない場合、配列$errorsに「メールアドレスは必須項目です」が代入されます。

2つ目は配列が空かどうかチェックする例文です。

関数search_databaseの引数に$keywordを設定、返ってきた値が$resultに代入され空の場合、「結果がありませんでした」が返ってきます。

もし空でない場合は、foreachで処理を行います。

3つ目はif文を使った例文です。

Reina

上はif文の省略法になります。
下に改めてif文を書いてみました。

$usernameが空の場合$messageには「’ゲスト’」が代入され、「ようこそ、ゲストさん」と呼び出されます。

$usernameが空でない場合は$messageに$usernameが代入され、「ようこそ、○○さん」となります。

PHPのforeachってどうやって使う?初心者向けの記事を読んでforeachをマスターしよう!

is_nullを使った例文

最後はis_nullを活用した例です。

// 1:データベースから取得した値がnullかチェック
$user_data = get_user_by_id(123);
if (is_null($user_data['last_login'])) {
    echo "初回ログインです";
} else {
    echo "前回のログイン: " . format_date($user_data['last_login']);
}

// 2:null合体演算子(PHP 7以降)との組み合わせ
function get_config_value($key) {
    $config = get_config();
    return $config[$key] ?? null;
}

$timeout = get_config_value('timeout');
if (is_null($timeout)) {
    $timeout = 30; // デフォルト値を設定
}

1つ目はget_user_by_id関数より、データベースから取得したid = 123の値がnullかどうか判断します。

nullの場合は「初回ログインです」が返され、nullでない場合は「前回のログイン:○○」が返されます。

2つ目は少し応用的な例文です。

get_config_value関数の引数に「’timeout’」を設定、get_config関数を呼び出して配列$configに代入します。

配列$config[$key]がnullでない場合はその値を返し、そうでなければnullを返します。

そうして返された$timeoutがnullの場合、$timeoutに整数30が代入されるという例文です。

isset、empty、is_nullを使うときの注意点

Reina

最後にこの3つを使うときの注意点を知っておきたいです。

これらの関数を効果的に使うには、いくつかの注意点があります。

違いや特徴の解説と重複する部分もありますが、改めて初心者がつまずきやすいポイントを抑えておきましょう。

次で各関数についての注意点を、例文をあわせて紹介します。

issetの注意点

issetを使う際の主な注意点は以下の通りです。

issetの注意点
  • nullの値に対してはfalseを返す
  • 値が0や空文字列でもtrueを返す(定義されていると判断)
  • 複数の変数を同時にチェックする場合、すべてがissetの条件を満たさないとfalseになる

改めて例文を見てみます。

// 注意点の例
$value = null;
var_dump(isset($value)); // bool(false)

$zero = 0;
var_dump(isset($zero)); // bool(true) 0は「設定されている」と判断される

$empty_string = "";
var_dump(isset($empty_string)); // bool(true) 空文字も「設定されている」

$a = 1;
$b = null;
$c = 3;
var_dump(isset($a, $b, $c)); // false($b が null であるため)

Reina

issetはnullの場合falseを返す!これを覚えておきましょう。

emptyの注意点

emptyを使用する際に気をつけるべきポイントです。

emptyの注意点
  • 数値の0や文字列の”0″もtrueになるため、数値入力フォームなどでは注意が必要
  • 「空」の定義が広いため、具体的な値チェックを行いたい場合は他の方法が適してる
  • 変数の型を考慮しない判定のため、型の違いによるバグが発生する可能性がある

emptyも例文を見てみます。

// 注意すべきemptyの動作
$zero = 0;
var_dump(empty($zero)); // bool(true) 数値の0は「空」と判定される

$zero_string = "0";
var_dump(empty($zero_string)); // bool(true) 文字列の"0"も「空」と判定される

// 数値入力フォームでの問題例
$age = $_POST['age']; // "0"が送信された場合
if (empty($age)) {
    echo "年齢を入力してください"; // 0歳と入力しても「空」と判定される
}
Reina

データ型は考慮しないので、注意が必要ですね。

is_nullの注意点

is_nullを使用する際の重要な注意点です。

is_nullの注意点
  • 未定義変数に対して使用するとエラーが発生する
  • 空文字列や0はnullではないので、falseを返す
  • PHPのnullは大文字小文字を区別しない(NULL, null, NuLlは同じ)
  • データベース操作では、SQL NULLとPHPのnullの違いに注意する必要がある

以下、is_nullの注意点を踏まえた例文です。

// is_nullの注意点
// var_dump(is_null($undefined)); // Notice: Undefined variable

// 事前にissetでチェックしてから使うのが安全
if (isset($value)) {
    if (is_null($value)) {
        echo "値はnullです";
    }
} else {
    echo "変数が定義されていません";
}

// 空文字はnullではない
$empty_string = "";
var_dump(is_null($empty_string)); // bool(false)
Reina

「null」と「空文字」は同じではないので、注意しましょう。

まとめ

今回はPHPの「isset」「empty」「is_null」の3つの関数の特徴や違い、注意点を解説しました。

issetは変数が定義されていて値がnull以外の場合にtrueを返し、フォーム送信データの確認などに適しています。

emptyは変数が「空」と見なせる値(未定義・null・false・0・”0″・””・array()など)の場合にtrueを返し、必須入力チェックに便利です。

is_nullは変数が厳密にnullかどうかのみを判定しますが、未定義変数にはエラーを発生させる特徴があります。

0や空文字がemptyではtrueになる点や、未定義変数をis_nullで直接確認できない点などの注意点を理解して、使い分けていきましょう。

DMM WEBCAMPではPHPの基礎から応用まで実践的に学べます。PHPをマスターしたい、Webエンジニアになりたい方は是非DMM WEBCAMPをチェックしてみてください。

PHPをマスターしよう!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

大学卒業後、新卒で食品の品質管理業務を4年半務める。

2023年3月よりDMM WEBCAMP 就業両立コースにてプログラミング学習開始し、見事未経験からエンジニア転職に成功。

現在は受託企業にてPHPエンジニアとして日々奮闘中。

エンジニアとして働く傍ら、Webライターとしても活動中です。

目次