読み込み中...

PHPで使うempty関数!必知の7つの活用法と事例

PHPのempty関数を活用する方法を解説するイラスト PHP
この記事は約10分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

PHPという言語において、変数が空かどうかをチェックするための便利な関数があります。

それが「empty」関数です。

この関数の使い方を身につけることで、変数が未設定、もしくはその内容が空であるかどうかを簡単に確認することができます。

コードを書く上で非常に頻繁に行われるこのチェックですが、実は誤解されやすい部分も多いです。

本記事では、このempty関数の使い方、具体的な活用例、注意点などを詳しく解説します。

●empty関数とは何か

empty関数は、PHPに組み込まれた組み込み関数の一つです。

これは、指定した変数が空かどうかを判断します。具体的には、次のような場合に「空」と判断します。

  1. 変数が未設定(定義されていない)場合
  2. 変数の値が0の場合
  3. 変数の値が空文字列の場合
  4. 変数の値がNULLの場合
  5. 変数が空配列の場合
  6. 公開プロパティがないオブジェクトの場合

●empty関数の基本的な使い方

empty関数の基本的な使い方を見てみましょう。

それでは、いくつかのサンプルコードを通じてその使用法を探ります。

○サンプルコード1:基本的な使用法

<?php
$var = '';

if (empty($var)) {
    echo '変数は空です。';
} else {
    echo '変数は空ではありません。';
}
?>

このコードでは、まず変数$varに空文字列を代入しています。

次に、empty関数を用いてその変数が空であるかどうかを判定します。

この例では、$varは空文字列を保持しているため、empty関数はtrueを返します。その結果、”変数は空です。”というメッセージが出力されます。

○サンプルコード2:配列内の要素をチェックする

<?php
$array = ['apple', '', 'banana'];

foreach ($array as $item) {
    if (empty($item)) {
        echo '空の要素があります。';
    } else {
        echo '要素は空ではありません。';
    }
}
?>

このコードでは、配列$arrayに3つの要素(’apple’, ”, ‘banana’)を設定しています。

そして、foreachループを用い

て配列の各要素に対してempty関数を適用し、要素が空かどうかを確認しています。

この例では、配列の2番目の要素が空文字列なので、empty関数はその要素に対してtrueを返します。

したがって、「空の要素があります。」というメッセージが出力されます。

●empty関数の応用例とそのサンプルコード

PHPのempty関数は、単純な変数や配列の値が空であるかどうかをチェックするだけでなく、実際の開発プロセスで様々なシチュエーションに適用できます。

ここでは、それらの応用例をいくつか取り上げ、具体的なサンプルコードとともに解説します。

○サンプルコード3:フォーム入力のバリデーション

<?php
$postData = $_POST;

if (empty($postData['username']) || empty($postData['password'])) {
    echo 'ユーザ名またはパスワードが入力されていません。';
} else {
    echo 'ユーザ名とパスワードが正しく入力されています。';
}
?>

このコードでは、ユーザーからのフォーム入力($_POST配列)をチェックしています。

具体的には、’username’と’password’というキーの値が空でないことを確認しています。

もしユーザ名またはパスワードが入力されていない場合、”ユーザ名またはパスワードが入力されていません。”というメッセージが出力されます。

逆に、両方とも正しく入力されている場合は、”ユーザ名とパスワードが正しく入力されています。”というメッセージが出力されます。

○サンプルコード4:条件分岐での使用例

<?php
$var = 0;

if (empty($var)) {
    echo '変数は0または空です。';
} else {
    echo '変数は0または空ではありません。';
}
?>

このコードでは、$varという変数に0を代入し、その値が空であるかどうかを判定しています。

ここで重要なのは、empty関数は0を空とみなすという点です。

そのため、この例では”変数は0または空です。”というメッセージが出力されます。

○サンプルコード5:エラーハンドリング

<?php
function getArrayItem($array, $index) {
    if (empty($array[$index])) {
        throw new Exception("指定したインデックスの値が存在しません。");
    }
    return $array[$index];
}

$array = ['apple', 'banana', 'cherry'];
try {
    echo getArrayItem($array, 5);
} catch (Exception $e) {
    echo $e->getMessage();
}
?>

このコードでは、指定した配列の指定したインデックスの値を取得する関数getArrayItemを定義しています。

この関数では、指定したインデックスの値が空(または存在しない)場合にExceptionを投げるようにしています。

そのため、存在しないインデックスを指定した場合、”指定したインデックスの値が存在しません。”というエラーメッセージが出力されます。

これらの例からわかるように、empty関数はPHPでのコーディングをより効率的で安全なものにするための重要なツールです。

しかし、empty関数を使う際にはいくつかの注意点があります。

それらについて次に詳しく見ていきましょう。

○サンプルコード6:APIからのレスポンスのチェック

<?php
$response = file_get_contents('https://example.com/api/some_endpoint');
$data = json_decode($response, true);

if (empty($data['result'])) {
    echo 'APIからのレスポンスが存在しません。';
} else {
    echo 'APIからのレスポンスは下記の通りです:';
    print_r($data['result']);
}
?>

このコードでは、APIからのレスポンスを取得し、その中の’result’キーの値が存在するかどうかを確認しています。

file_get_contents関数を使用してAPIからのレスポンスを取得し、json_decode関数でそのレスポンスを連想配列に変換しています。

そして、その連想配列中に’result’キーが存在し、その値が空でないことを確認しています。

もし’result’キーの値が空である場合、”APIからのレスポンスが存在しません。”というメッセージが出力されます。

逆に、’result’キーの値が存在する場合、その内容を出力します。

○サンプルコード7:オプショナルな設定値のハンドリング

<?php
$settings = [
    'name' => 'John Doe',
    'email' => 'john@example.com',
];

if (empty($settings['phone'])) {
    $settings['phone'] = '000-0000-0000';
}

echo '設定された電話番号は:' . $settings['phone'];
?>

このコードでは、ユーザー設定の配列$settingsから電話番号を取得しようとしています。

しかし、電話番号は必ずしも設定されていないオプショナルな値なので、この値が設定されていない場合にはデフォルト値を割り当てています。

empty関数を使用して’phone’キーの値が存在しないか、あるいは空であることを確認し、その場合にはデフォルト値を割り当てています。

この例では、電話番号が設定されていないため、デフォルトの”000-0000-0000″が出力されます。

以上のように、empty関数はAPIのレスポンスの確認やオプショナルな設定値のハンドリングなど、様々なシチュエーションで活用することができます。

しかし、この関数を使用する際にはいくつかの注意点があります。

それらについて次に詳しく見ていきましょう。

●empty関数の注意点とその対処法

PHPのempty関数は非常に便利な機能ですが、その使用にはいくつか注意が必要です。

一つ目の注意点として、empty関数は0や”0″も空とみなします。これは

、0や”0″が明確に値があると考える場合には問題となる可能性があります。

<?php
$num = 0;
if (empty($num)) {
    echo '変数$numは空です。';
} else {
    echo '変数$numには値が存在します。';
}
?>

このコードでは、変数$numには値が設定されていますが、その値が0なので、empty関数は変数$numを空とみなします。

そのため、このコードは”変数$numは空です。”と出力します。しかし、実際には変数$numには値が存在しています。

このような場合、empty関数の代わりにisset関数を使用することで解決可能です。

二つ目の注意点として、empty関数は直接関数の戻り値を評価できません。

つまり、empty(getValue())というようなコードはエラーとなります。

これを回避するためには、一旦変数に関数の戻り値を代入し、その変数をempty関数で評価することが必要です。

以上がempty関数を使用する上での主な注意点です。

これらの注意点を理解し、適切に対処することで、empty関数はより効果的なツールとなります。

●PHPでのempty関数のカスタマイズ方法

PHPのempty関数は、そのままでも非常に便利ですが、場合によっては特定の条件で「空」と判定されるようにカスタマイズしたい場合もあります。

そのようなときには、自分でカスタムempty関数を定義することが有効です。

ここでは、0や”0″を空と判断しないカスタムempty関数の例を見てみましょう。

<?php
function customEmpty($var) {
    return empty($var) && $var !== 0 && $var !== "0";
}

$num = 0;
if (customEmpty($num)) {
    echo '変数$numは空です。';
} else {
    echo '変数$numには値が存在します。';
}
?>

このコードでは、まずcustomEmptyという新しい関数を定義しています。

この関数は、引数の変数が空で、かつその変数が0でも”0″でもないときにtrueを返します。

そして、変数$numがこの新しい関数customEmptyによって評価されます。

変数$numの値が0であるため、このコードは”変数$numには値が存在します。”と出力します。

これで、empty関数が0や”0″を空とみなすという問題を解決できました。

このように、PHPでは自分で関数を定義することで、必要に応じてempty関数の挙動をカスタマイズすることができます。

まとめ

この記事では、PHPのempty関数について詳しく見てきました。

空の変数を確認するためのツールとして、empty関数は開発者にとって重要な存在です。

しかし、一見単純な関数でも、その仕組みをしっかりと理解することが、エラーを避け、コードの品質を保つために不可欠です。

まず、empty関数がどのように動作するか、その基本的な使用方法を学びました。

それから、empty関数が考慮しない値や、意図しない結果を生じる可能性がある状況について詳しく調査しました。

また、0や”0″といった特定の値を「空」でないと認識させるために、カスタムempty関数を作成する方法についても説明しました。

最終的には、PHPのempty関数を適切に使用し、その運用上の問題点を理解し、そしてそれを克服する方法をマスターすることが求められます。

これにより、PHPのコーディングがさらにスムーズに、そして効率的になります。

ここで紹介した知識とスキルを活用して、自分自身のプログラミング経験を豊かにしてください。

空の変数を確認するためのempty関数は、あなたのPHPプログラミングスキルを次のレベルに引き上げるための強力なツールとなるでしょう。

この記事が、empty関数の理解と活用に役立つ情報を提供できたなら幸いです。

それでは、グッドプログラミングを!