PHP Tips | 文字列処理:基本操作 – null を空文字に変換

PHP PHP
スポンサーリンク

文字列処理の「null を空文字に変換」とは何か

PHP で文字列を扱うとき、「null」と「空文字("")」はよく似て見えますが、まったく別物です。
初心者のうちは、この違いが原因でバグが出たり、「なんでエラーになるの?」とハマりがちです。

  • null は「値そのものが存在しない」状態
  • "" は「値はあるが、中身が空の文字列」

というイメージを持ってください。

たとえば、フォーム入力や外部 API の結果などで「値が来ないことがある」場合、null が入っていることがあります。
しかし、そのまま画面に表示したり、文字列結合したりするときには、null よりも空文字 "" にそろえておいた方が扱いやすい場面が多いです。

ここで出てくるのが「null を空文字に変換する」というテクニックです。


なぜ null を空文字に変換したいのか

画面表示でのトラブルを防ぐ

たとえば、ユーザーの「ニックネーム」を表示したいとします。
ニックネームが登録されていないユーザーには null が入っているケースを考えましょう。

$nickname = null;

echo "ようこそ、" . $nickname . " さん!";
PHP

このコードは一見動きそうですが、$nicknamenull のときでも PHP はエラーにはなりません。
ただし、null を文字列として結合すると、実質的には「何もない」状態として扱われます。

結果として、画面にはこう表示されます。

ようこそ、 さん!

一応動いてはいますが、「意図して空なのか」「本当は値があるはずなのに来ていないのか」が分かりにくくなります。
また、場合によっては null をそのまま扱うことで、別の処理で警告やエラーにつながることもあります。

そこで、「null だったら空文字にしておく」というルールを決めておくと、後続の処理がシンプルになります。


文字列処理をシンプルにする

たとえば、次のような処理を考えます。

$firstName  = null;      // 名
$lastName   = "山田";    // 姓

$fullName = $lastName . " " . $firstName;
echo $fullName;
PHP

この場合、$firstNamenull なので、結果は次のようになります。

山田 

一見問題なさそうですが、もしこのあとで

  • 文字数を数えたい
  • 空かどうかチェックしたい
  • JSON にして他システムに渡したい

といった処理をするとき、null が混ざっていると条件分岐が増えてコードが読みにくくなります。

そこで、「文字列として扱う前に、null は全部空文字に変換しておく」という方針を取ると、後の処理が「文字列だけを相手にすればよい」状態になり、コードがスッキリします。


PHP で null を空文字に変換する基本パターン

パターン1:三項演算子を使う

最も基本的で分かりやすい書き方です。

$value = null;

// $value が null なら ""(空文字)、そうでなければそのまま
$text = ($value === null) ? "" : $value;

echo $text;
PHP

ここでのポイントは、=== を使って「厳密に null かどうか」を判定していることです。
== だと、0false なども「同じようなもの」として扱われてしまうので、初心者のうちは === を使う癖をつけると安全です。


パターン2:null 合体演算子(??)を使う

PHP 7 以降で使える、とても便利な演算子です。
null だったら右側の値を使う」という意味になります。

$value = null;

// $value が null なら "" を使う
$text = $value ?? "";

echo $text;
PHP

これは、先ほどの三項演算子の短縮版のようなイメージで OK です。

// ほぼ同じ意味
$text = ($value === null) ? "" : $value;
$text = $value ?? "";
PHP

?? は「null かどうか」だけを見てくれるので、「0 や false はそのまま使いたい」というときにも安心して使えます。


パターン3:関数にしてしまう

同じ「null を空文字に変換する」処理を何度も書くなら、関数にしてしまうとコードが読みやすくなります。

function nullToEmptyString($value) {
    return $value ?? "";
}

$nickname = null;
$nicknameText = nullToEmptyString($nickname);

echo "ようこそ、" . $nicknameText . " さん!";
PHP

このように関数化しておくと、コードを読む人が

「ああ、ここで null を空文字にそろえているんだな」

と一目で理解できます。
「意図が伝わるコード」は、バグを減らすうえでとても大事なポイントです。


実務でよくあるシチュエーション別の例題

例題1:フォーム入力の値を扱うとき

ユーザーがフォームに入力した値は、未入力の場合に null ではなく空文字 "" になることが多いですが、
システムやライブラリによっては null が入ることもあります。

たとえば、次のようなコードを考えます。

// フォームから来た値(仮定)
$name     = $_POST['name']     ?? null;
$nickname = $_POST['nickname'] ?? null;

// ここで null を空文字にそろえる
$name     = $name     ?? "";
$nickname = $nickname ?? "";

echo "名前: " . $name . "\n";
echo "ニックネーム: " . $nickname . "\n";
PHP

ここでのポイントは、「外から来た値は、まず最初に自分の扱いやすい形にそろえる」という考え方です。
null を空文字に変換しておけば、この後の処理では「文字列として扱う」ことだけを考えればよくなります。


例題2:データベースから取得した値を表示するとき

データベースのカラムが NULL を許可している場合、PHP 側の変数にも null が入ってきます。

// 例:ユーザー情報を DB から取得した結果(イメージ)
$user = [
    'id'        => 1,
    'name'      => '山田太郎',
    'nickname'  => null,   // DB 上で NULL
    'comment'   => null,   // DB 上で NULL
];

// 表示用に null を空文字に変換
$nickname = $user['nickname'] ?? "";
$comment  = $user['comment']  ?? "";

echo "名前: " . $user['name'] . "\n";
echo "ニックネーム: " . $nickname . "\n";
echo "ひとこと: " . $comment . "\n";
PHP

このように、画面表示用の変数に代入するときに ?? "" を使っておくと、テンプレート側(HTML 側)のコードがシンプルになります。


例題3:配列の全要素に一括で適用する

たくさんの項目をまとめて処理したい場合、array_map を使って一気に null を空文字に変換することもできます。

$data = [
    'name'     => '山田太郎',
    'nickname' => null,
    'comment'  => null,
];

$data = array_map(function ($value) {
    return $value ?? "";
}, $data);

var_dump($data);
PHP

このコードの実行結果は次のようになります。

array(3) {
  ["name"]=>
  string(12) "山田太郎"
  ["nickname"]=>
  string(0) ""
  ["comment"]=>
  string(0) ""
}

これで、「この配列の中には null は存在しない」という前提で後続の処理を書けるようになります。
実務では、API レスポンスや DB 結果を整形するときによく使うパターンです。


重要ポイントの深掘り

「null」と「空文字」の違いをちゃんと意識する

初心者のうちは、null"" を「なんとなく同じようなもの」と感じてしまいがちですが、
PHP にとってはまったく別の値です。

たとえば、次の比較を見てください。

var_dump(null == "");   // bool(true)
var_dump(null === "");  // bool(false)
PHP

== で比べると true になりますが、=== で比べると false になります。
これは、== が「ゆるい比較」、=== が「厳密な比較」をするからです。

実務では、「型の違いによるバグ」を避けるために、基本的には === を使うことが多いです。
そのうえで、「そもそも null を早めに空文字に変換しておく」という方針を取ると、比較や条件分岐がシンプルになります。


null 合体演算子(??)を使うときの注意点

?? はとても便利ですが、「null のときだけ右側を使う」という点をしっかり理解しておきましょう。

$value1 = null;
$value2 = "";
$value3 = 0;

var_dump($value1 ?? "default");  // string(7) "default"
var_dump($value2 ?? "default");  // string(0) ""
var_dump($value3 ?? "default");  // int(0)
PHP

ここでのポイントは、""0 は「null ではない」ので、そのまま使われるということです。
「空文字や 0 のときも別の値にしたい」という場合は、?? ではなく、if 文や三項演算子で条件を自分で書く必要があります。


「どのタイミングで null を空文字に変換するか」を決める

実務では、「どこで null を空文字に変換するか」をチームで決めておくと、コードの統一感が出ます。

よくあるパターンは次のような考え方です。

  • 外部から値を受け取った直後(フォーム、API、DB など)で変換する
  • 画面表示用の変数に詰め替えるときに変換する
  • ドメインロジック(ビジネスロジック)の中では、null を許容するかどうかを明確に決める

初心者のうちは、

「文字列として扱う前に、null を空文字にそろえる」

というルールを自分の中で持っておくと、かなりバグを減らせます。


まとめ:今日から使える「null を空文字に変換」テンプレ

最後に、実務でもそのまま使える形で、よく使う書き方をまとめておきます。

単体の値に対して

// $value が null なら空文字にする
$text = $value ?? "";
PHP

関数として共通化

function nullToEmptyString($value) {
    return $value ?? "";
}

$text = nullToEmptyString($value);
PHP

配列全体に適用

$data = array_map(function ($value) {
    return $value ?? "";
}, $data);
PHP

このあたりを「手癖」で書けるようになると、文字列処理のコードが一気に安定してきます。

タイトルとURLをコピーしました