PHPでコードを書くとき、変数は非常によく使います。
$name = '田中';
$count = 10;
$items = [];
PHPでは、変数名の前に $ を付けて値を扱います。
その中でも大切なのが、変数の初期化です。
変数の初期化とは、簡単にいうと、変数を使う前に最初の値を入れておくことです。
$name = '';
$count = 0;
$items = [];
$isActive = false;
$user = null;
PHPは、変数を事前に宣言しなくても使える言語です。
値を代入した時点で、その変数が作られます。
しかし、だからといって初期化をせずに変数を使ってよいわけではありません。
未定義の変数を使うと、警告が出たり、意図しない動作につながったりします。
特にPHP 8.0以降では、未定義変数を参照すると E_WARNING が発生します。
PHP 7以前では主に E_NOTICE でした。いずれにしても、実務では変数は使う前に初期化しておくのが基本です。
この記事では、PHPの変数の初期化について、基本から実務での注意点まで詳しく解説します。
変数の初期化とは
変数の初期化とは、変数に最初の値を代入することです。
たとえば、次のコードを見てください。
$price = 0;
このコードでは、$price という変数に 0 を入れています。これが初期化です。
PHPでは、次のようにいきなり変数へ値を代入できます。
$message = 'こんにちは';
この時点で $message という変数が作られ、文字列の 'こんにちは' が入ります。
一方で、まだ値を代入していない変数を使うと問題になります。
echo $message;
このコードを実行したとき、事前に $message が定義されていなければ、$message は未定義変数として扱われます。
そのため、変数を使う前には、次のように初期値を入れておくのが安全です。
$message = '';
echo $message;
なぜ変数の初期化が必要なのか
PHPでは、初期化していない変数でも、設定や状況によっては処理が続くことがあります。
しかし、未定義変数に依存したコードは不安定です。変数を初期化する主な理由は、次の3つです。
未定義変数の警告を防ぐため
初期化していない変数を使うと、警告の原因になります。
たとえば、次のコードです。
$total += 100;
このコードは、一見すると $total に 100 を加算しているように見えます。
しかし、+= は現在の値に加算する演算子です。
つまり、実質的には次のような処理をしています。
$total = $total + 100;
右辺で $total を参照しているため、事前に $total が定義されていないと、未定義変数を使っていることになります。
安全に書くなら、次のようにします。
$total = 0;
$total += 100;
このように、数値として使う変数は、最初に 0 で初期化しておくと安全です。
コードの意図が分かりやすくなるため
初期値を見ると、その変数がどのような目的で使われるのかが分かりやすくなります。
$count = 0;
$errors = [];
$name = '';
$isLoggedIn = false;
$user = null;
このコードを見ると、それぞれの変数の役割を想像できます。
$count は数値、$errors は配列、$name は文字列、$isLoggedIn は真偽値、$user はまだ取得できていないユーザー情報として使うのだと分かります。
初期化は、単にエラーを防ぐだけではありません。
コードを読む人に対して、この変数は何のために使うのかを伝える役割もあります。
条件分岐による代入漏れを防ぐため
条件分岐の中だけで変数に値を入れると、条件によっては変数が作られないことがあります。
たとえば、次のコードです。
if ($score >= 80) {
$result = '合格';
}
echo $result;
$score が80以上なら $result に '合格' が入ります。
しかし、$score が80未満の場合、$result は作られません。
その状態で echo $result; を実行すると、未定義変数の警告につながります。
このような場合は、先に初期化しておきます。
$result = '不合格';
if ($score >= 80) {
$result = '合格';
}
echo $result;
これなら、どの条件でも $result には必ず値が入ります。
PHPでよく使う初期値
変数の初期値は、その変数を何として使うかによって変わります。
よく使う初期値は次の通りです。
| 用途 | 初期値の例 |
|---|---|
| 文字列 | '' |
| 数値 | 0 |
| 小数 | 0.0 |
| 配列 | [] |
| 真偽値 | false または true |
| 値がまだない状態 | null |
| オブジェクト | null またはインスタンス |
それぞれ詳しく見ていきましょう。
文字列として使う変数の初期化
文字列として使う変数は、空文字で初期化することが多いです。
$name = '';
$message = '';
$title = '';
たとえば、フォームの入力値を扱う場合です。
$name = '';
if (!empty($_POST['name'])) {
$name = $_POST['name'];
}
このようにしておくと、フォームが送信されていない状態でも $name が存在するため、未定義変数の警告を防げます。
ただし、フォームの値を扱う場合は、後述する $_POST['name'] ?? '' のような書き方もよく使われます。
数値として使う変数の初期化
数値として使う変数は、0 で初期化することが多いです。
$count = 0;
$total = 0;
$price = 0;
たとえば、合計金額を計算する場合です。
$total = 0;
foreach ($prices as $price) {
$total += $price;
}
echo $total;
$total を最初に 0 で初期化しておくことで、ループ内で安全に加算できます。
カウント処理でも同じです。
$count = 0;
foreach ($users as $user) {
if ($user['active']) {
$count++;
}
}
echo $count;
件数、合計、金額などを扱う変数は、基本的に 0 で初期化すると分かりやすいです。
配列として使う変数の初期化
配列として使う変数は、空配列で初期化します。
$items = [];
$errors = [];
$users = [];
PHPでは、空配列は [] で書けます。
たとえば、エラーメッセージを配列に追加していく場合です。
$errors = [];
if ($name === '') {
$errors[] = '名前を入力してください。';
}
if ($email === '') {
$errors[] = 'メールアドレスを入力してください。';
}
最初に $errors = []; としておけば、エラーがない場合でも $errors は空配列として扱えます。
古い書き方では、次のように書くこともできます。
$items = array();
ただし、現在では短く書ける [] がよく使われます。
真偽値として使う変数の初期化
フラグとして使う変数は、true または false で初期化します。
$isLoggedIn = false;
$hasError = false;
$isValid = true;
たとえば、エラーの有無を管理する場合です。
$hasError = false;
if ($name === '') {
$hasError = true;
}
if ($hasError) {
echo '入力内容にエラーがあります。';
}
このように、状態を表す変数は真偽値で初期化すると分かりやすくなります。
変数名も、is、has、can などから始めると、真偽値であることが伝わりやすくなります。
$isActive = false;
$hasPermission = false;
$canEdit = false;
値がまだない場合はnullで初期化する
null は、「値がない」「まだ値が決まっていない」という状態を表します。
$user = null;
$selectedId = null;
$result = null;
たとえば、ユーザー情報を検索して、見つかった場合だけ値を入れる処理を考えます。
$selectedUser = null;
foreach ($users as $user) {
if ($user['id'] === $targetId) {
$selectedUser = $user;
break;
}
}
if ($selectedUser === null) {
echo 'ユーザーが見つかりませんでした。';
}
この場合、$selectedUser は「ユーザーが見つかれば配列が入る」「見つからなければ null のまま」という意味になります。
null は便利ですが、空文字や 0 とは意味が違います。
$name = ''; // 文字列だが中身が空
$count = 0; // 数値として0
$user = null; // 値がない
この違いを意識することが大切です。
未定義変数とは
未定義変数とは、まだ一度も値を代入していない変数のことです。
echo $name;
このコードで、事前に $name が定義されていなければ、$name は未定義変数です。
PHP 8.0以降では、未定義変数を参照すると E_WARNING が発生します。
そのため、次のように初期化してから使うのが基本です。
$name = '';
echo $name;
また、変数が定義されているか確認してから使う方法もあります。
if (isset($name)) {
echo $name;
}
ここで出てくる isset() は、PHPで変数の存在を確認するときによく使う関数です。
isset()、empty()、is_null() の違い
PHPで変数の初期化や存在確認を扱うときに、よく使うのが次の3つです。
isset()
empty()
is_null()
それぞれ似ていますが、意味は違います。
isset()とは
isset() は、変数が存在していて、かつ null ではないかを確認します。
$name = '田中';
if (isset($name)) {
echo '変数は存在します';
}
次の場合、isset() は false になります。
$name = null;
var_dump(isset($name)); // false
つまり、isset() は単に「変数があるか」だけではなく、「値が null ではないか」も見ています。
そのため、次の2つはどちらも false になります。
var_dump(isset($undefinedValue)); // false
$value = null;
var_dump(isset($value)); // false
未定義変数かどうかを簡単に確認したい場合には便利ですが、「キーは存在するが値は null」という状態を区別したい場合には注意が必要です。
empty()とは
empty() は、変数が空かどうかを判定します。
$name = '';
if (empty($name)) {
echo '名前が空です';
}
empty() は、次のような値を空として扱います。
''
0
'0'
null
false
[]
便利な一方で、注意も必要です。
たとえば、次のコードを見てください。
$age = 0;
if (empty($age)) {
echo '年齢が入力されていません';
}
この場合、$age は 0 です。
しかし、empty() は 0 を空とみなすため、条件が成立してしまいます。
年齢、数量、金額などで 0 を有効な値として扱う場合、empty() を使うと意図しない判定になることがあります。
そのような場合は、厳密比較を使った方が安全です。
if ($age === null) {
echo '年齢が入力されていません';
}
文字列の未入力を判定するなら、次のように書けます。
if ($name === '') {
echo '名前が入力されていません';
}
なお、empty() は未定義変数に対して使っても、基本的に未定義変数の警告を出さずに判定できます。
if (empty($name)) {
echo '空です';
}
ただし、0 や '0' も空として扱うため、実務では使いどころを選ぶことが大切です。
is_null()とは
is_null() は、変数の値が null かどうかを判定します。
$user = null;
if (is_null($user)) {
echo 'ユーザー情報がありません';
}
同じ意味で、厳密比較を使うこともできます。
if ($user === null) {
echo 'ユーザー情報がありません';
}
実務では、is_null($user) よりも $user === null の方がよく使われる場面もあります。
ただし、未定義変数に対していきなり is_null($user) を使うと、未定義変数の警告につながる可能性があります。
そのため、次のように使い分けるとよいでしょう。
| 目的 | 使うもの |
|---|---|
| 変数が存在し、nullではないか確認したい | isset() |
| 空文字、0、false、空配列なども含めて空判定したい | empty() |
| 値がnullかどうか確認したい | is_null() または === null |
null合体演算子 ?? を使った初期化
PHPでは、配列やフォームの値を扱うときに、null合体演算子 ?? がよく使われます。
$name = $_POST['name'] ?? '';
これは、次のような意味です。
$_POST['name'] が存在し、nullでなければその値を使う。
存在しない、またはnullなら空文字を使う。
フォーム処理では非常によく使われます。
$name = $_POST['name'] ?? '';
$email = $_POST['email'] ?? '';
$message = $_POST['message'] ?? '';
この書き方を使うと、$_POST['name'] が存在しない場合でも、未定義配列キーの警告を防ぎやすくなります。
配列キーが存在しない場合の注意点
連想配列では、存在しないキーにアクセスすると警告の原因になります。
$user = [
'name' => '田中',
];
echo $user['email'];
この場合、email キーが存在しないため、PHP 8.0以降では E_WARNING が発生します。
安全に書くなら、次のようにします。
$email = $user['email'] ?? '';
これなら、email キーが存在しない場合は空文字が入ります。
?? と array_key_exists() の違い
?? は便利ですが、値が null の場合も右辺を返します。
たとえば、次の配列を見てください。
$user = [
'email' => null,
];
この場合、次のコードでは $email に空文字が入ります。
$email = $user['email'] ?? '';
なぜなら、email キーは存在していますが、値が null だからです。
一方で、「値が null でも、キーが存在するかどうかを確認したい」という場合は、array_key_exists() を使います。
if (array_key_exists('email', $user)) {
echo 'emailキーは存在します';
}
つまり、使い分けは次のようになります。
| 目的 | 書き方 |
|---|---|
| 値がなければ初期値を使いたい | $email = $user['email'] ?? ''; |
| キーの存在自体を確認したい | array_key_exists('email', $user) |
| nullではない値があるか確認したい | isset($user['email']) |
?? の優先順位にも注意する
?? を文字列結合などと一緒に使う場合は、括弧を付けた方が安全です。
たとえば、次のようなコードです。
echo '名前:' . $name ?? '未設定';
これは、意図が分かりにくい書き方です。
$name がなければ '未設定' を表示したいなら、次のように括弧を付けます。
echo '名前:' . ($name ?? '未設定');
?? を他の演算子と組み合わせるときは、意図を明確にするために括弧を使うとよいです。
フォーム処理での変数初期化
PHPでは、フォーム処理で変数の初期化がよく使われます。
たとえば、お問い合わせフォームを考えます。
$name = '';
$email = '';
$message = '';
$errors = [];
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = $_POST['name'] ?? '';
$email = $_POST['email'] ?? '';
$message = $_POST['message'] ?? '';
if ($name === '') {
$errors[] = '名前を入力してください。';
}
if ($email === '') {
$errors[] = 'メールアドレスを入力してください。';
}
if ($message === '') {
$errors[] = 'お問い合わせ内容を入力してください。';
}
}
最初に次の変数を初期化しています。
$name = '';
$email = '';
$message = '';
$errors = [];
これにより、フォームがまだ送信されていない初回表示時でも、各変数を安全に使えます。
たとえば、HTML側で次のように出力できます。
<input type="text" name="name" value="<?= htmlspecialchars($name, ENT_QUOTES, 'UTF-8') ?>">
ここで重要なのは、$_POST['name'] ?? '' は未定義キーによる警告を防ぐための書き方だということです。
ユーザー入力を安全に扱うには、それだけでは不十分です。実務では、次のような処理も必要になります。
- 入力値のバリデーション
- 出力時のエスケープ
- 必要に応じた型変換
- CSRF対策
特に、画面に出力するときは htmlspecialchars() を使ってエスケープすることが重要です。
echo htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
ループ処理での初期化
ループ処理では、合計値や配列をループの前で初期化します。
合計値を計算する場合
$total = 0;
foreach ($prices as $price) {
$total += $price;
}
echo $total;
$total を 0 で初期化してから加算することで、未定義変数を避けられます。
配列に値を追加する場合
$names = [];
foreach ($users as $user) {
$names[] = $user['name'];
}
print_r($names);
最初に $names = []; としておくことで、ユーザーが0件の場合でも $names は空配列として扱えます。
フラグを使う場合
$found = false;
foreach ($users as $user) {
if ($user['id'] === $targetId) {
$found = true;
break;
}
}
if ($found) {
echo 'ユーザーが見つかりました。';
} else {
echo 'ユーザーが見つかりませんでした。';
}
このように、検索結果の有無を判定したい場合は、最初に false で初期化しておくと分かりやすいです。
条件分岐での初期化
条件によって変数に値を入れる場合は、代入漏れに注意が必要です。
条件分岐で変数が未定義になる例
悪い例です。
if ($status === 'published') {
$label = '公開中';
}
echo $label;
$status が 'published' でない場合、$label は未定義のままです。
条件分岐で安全に初期化する例
改善例です。
$label = '未公開';
if ($status === 'published') {
$label = '公開中';
}
echo $label;
または、else を使って、どちらの条件でも必ず代入されるようにします。
if ($status === 'published') {
$label = '公開中';
} else {
$label = '未公開';
}
echo $label;
さらに短く書くなら、三項演算子も使えます。
$label = $status === 'published' ? '公開中' : '未公開';
条件分岐では、「どのルートを通っても変数に値が入るか」を意識することが大切です。
関数内での変数初期化
関数の中でも、変数は使う前に初期化します。
function calculateTotal(array $prices): int
{
$total = 0;
foreach ($prices as $price) {
$total += $price;
}
return $total;
}
この関数では、戻り値の型が int です。
そのため、合計値を入れる $total は 0 で初期化しています。
配列を返す関数の初期化例
配列を返す関数なら、空配列で初期化します。
function getErrorMessages(array $input): array
{
$errors = [];
if (($input['name'] ?? '') === '') {
$errors[] = '名前を入力してください。';
}
if (($input['email'] ?? '') === '') {
$errors[] = 'メールアドレスを入力してください。';
}
return $errors;
}
この関数は、エラーがない場合でも空配列 [] を返します。
呼び出し側から見ると、常に配列が返るため扱いやすくなります。
$errors = getErrorMessages($input);
foreach ($errors as $error) {
echo $error;
}
戻り値の型に合わせて初期値を決めると、コードが安定します。
変数のスコープにも注意する
PHPでは、変数のスコープにも注意が必要です。
スコープとは、変数を使える範囲のことです。
関数の外で定義した変数は関数内でそのまま使えない
たとえば、次のコードを見てください。
$name = '田中';
function showName()
{
echo $name;
}
関数の外で定義した $name は、関数の中でそのまま使えません。
関数には引数として値を渡す
関数の中で使いたい場合は、引数として渡すのが基本です。
$name = '田中';
function showName(string $name): void
{
echo $name;
}
showName($name);
変数を初期化していても、スコープが違えば参照できません。
「初期化したはずなのに未定義になる」という場合は、スコープの違いが原因になっていることもあります。
クラスのプロパティの初期化
PHPでは、通常の変数だけでなく、クラスのプロパティも初期化が重要です。
class User
{
public string $name = '';
public int $age = 0;
public array $roles = [];
}
このように、プロパティに初期値を設定できます。
型付きプロパティは未初期化に注意
PHPでは、型付きプロパティを使えます。
class User
{
public string $name;
}
しかし、この状態で初期化せずにアクセスするとエラーになります。
$user = new User();
echo $user->name;
$name は型付きプロパティですが、まだ値が入っていません。
このような未初期化の型付きプロパティにアクセスすると、Error が発生します。
安全にするには、初期値を入れます。
class User
{
public string $name = '';
}
または、コンストラクタで初期化します。
class User
{
public string $name;
public int $age;
public function __construct(string $name, int $age)
{
$this->name = $name;
$this->age = $age;
}
}
nullable型でも自動的にnullになるわけではない
?string のようなnullable型にも注意が必要です。
class User
{
public ?string $name;
}
?string は、「文字列または null を代入できる」という意味です。
しかし、初期値を指定しなければ、自動的に null が入るわけではありません。未初期化のままです。
null で初期化したい場合は、次のように明示します。
class User
{
public ?string $name = null;
}
この違いは重要です。
unset() と初期化の違い
unset() は、変数を削除するために使います。
$name = '田中';
unset($name);
この後、$name は存在しない扱いになります。
var_dump(isset($name)); // false
一方、次のコードは変数を削除しているわけではありません。
$name = '';
これは、$name に空文字を代入しているだけです。
空値を代入する場合と変数を削除する場合の違い
次の2つは意味が違います。
$name = '';
これは、変数は存在していて、中身が空文字の状態です。
unset($name);
これは、変数そのものを削除して、未定義の状態にしています。
実務では、単に値を空にしたいだけなら、unset() よりも用途に合った初期値を代入する方が分かりやすいです。
$name = '';
$items = [];
$count = 0;
$user = null;
よくある悪い例と改善例
ここからは、変数の初期化でよくあるミスを見ていきましょう。
合計値を初期化していない
悪い例です。
foreach ($prices as $price) {
$total += $price;
}
echo $total;
$total を初期化していないため、未定義変数の警告につながります。
改善例です。
$total = 0;
foreach ($prices as $price) {
$total += $price;
}
echo $total;
条件によって変数が作られない
悪い例です。
if ($isMember) {
$discount = 1000;
}
$price = 5000 - $discount;
$isMember が false の場合、$discount が未定義になります。
改善例です。
$discount = 0;
if ($isMember) {
$discount = 1000;
}
$price = 5000 - $discount;
配列を初期化していない
悪い例です。
if ($name === '') {
$errors[] = '名前を入力してください。';
}
$errors を事前に配列として初期化していないため、分かりにくいコードになります。
改善例です。
$errors = [];
if ($name === '') {
$errors[] = '名前を入力してください。';
}
フォーム値を直接使っている
悪い例です。
$name = $_POST['name'];
name が送信されていない場合、未定義配列キーの警告につながります。
改善例です。
$name = $_POST['name'] ?? '';
ただし、これはあくまで未定義キーへの対策です。
出力するときは、必ず必要に応じてエスケープします。
echo htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
empty() で0を空扱いしてしまう
悪い例です。
$quantity = 0;
if (empty($quantity)) {
echo '数量が入力されていません';
}
この場合、0 も空と判定されます。
もし 0 を有効な値として扱いたいなら、次のように判定します。
if ($quantity === null) {
echo '数量が入力されていません';
}
フォーム入力の空文字を判定したいなら、次のようにします。
if ($quantity === '') {
echo '数量が入力されていません';
}
WordPressでよくある変数の初期化
WordPressのテーマやプラグイン開発でも、変数の初期化は重要です。
たとえば、投稿一覧を配列にまとめる場合です。
$articles = [];
$query = new WP_Query([
'post_type' => 'post',
'posts_per_page' => 10,
]);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$articles[] = [
'title' => get_the_title(),
'url' => get_permalink(),
];
}
}
wp_reset_postdata();
最初に $articles = []; としておけば、投稿が0件だった場合でも $articles は空配列として扱えます。
テンプレート側でも安全に処理しやすくなります。
if (!empty($articles)) {
foreach ($articles as $article) {
echo '<a href="' . esc_url($article['url']) . '">';
echo esc_html($article['title']);
echo '</a>';
}
}
WordPressでは、取得できるデータが常に存在するとは限りません。
そのため、投稿データ、カスタムフィールド、オプション値などを扱うときも、初期値を意識しておくと安定したコードになります。
変数初期化のベストプラクティス
PHPで変数を初期化するときは、次のポイントを意識するとよいです。
用途に合った初期値を使う
変数の目的に合わせて、適切な初期値を選びます。
$name = ''; // 文字列
$count = 0; // 数値
$price = 0.0; // 小数
$items = []; // 配列
$isActive = false; // 真偽値
$user = null; // 値がまだない
初期値を見ただけで、その変数の用途が伝わるようにするのが理想です。
変数の型を途中で変えすぎない
PHPは動的型付けの言語なので、同じ変数に別の型の値を入れることができます。
$value = 0;
$value = 'こんにちは';
$value = [];
文法上は可能ですが、実務ではあまりおすすめできません。
変数の型が途中で変わると、コードの意味が分かりにくくなります。
あまり良くない例です。
$result = false;
if ($success) {
$result = ['id' => 1, 'name' => '田中'];
}
この場合、$result が真偽値なのか配列なのか分かりにくくなります。
より分かりやすくするなら、次のようにします。
$user = null;
if ($success) {
$user = ['id' => 1, 'name' => '田中'];
}
この場合、$user は「ユーザー情報の配列、または存在しない場合は null」だと読み取れます。
初期化しすぎにも注意する
変数の初期化は大切ですが、何でもファイルの先頭で大量に初期化すればよいわけではありません。
$name = '';
$email = '';
$message = '';
$age = 0;
$user = null;
$items = [];
$errors = [];
$result = null;
使うかどうか分からない変数まで大量に並べると、かえって読みづらくなります。
変数は、使う範囲のなるべく近くで初期化するのが基本です。
たとえば、エラー配列ならバリデーション処理の直前で十分です。
$errors = [];
if ($name === '') {
$errors[] = '名前を入力してください。';
}
合計値なら、ループの直前で初期化すると分かりやすいです。
$total = 0;
foreach ($prices as $price) {
$total += $price;
}
「とにかく先頭で全部初期化する」のではなく、「必要な場所で、用途に合った初期値を入れる」ことが大切です。
empty() に頼りすぎない
empty() は便利ですが、判定が広すぎる場合があります。
$value = '0';
if (empty($value)) {
echo '空です';
}
この場合、'0' も空として扱われます。
入力値として '0' や 0 が有効な場面では、empty() ではなく厳密比較を使った方が安全です。
if ($value === '') {
echo '空文字です';
}
または、値がない状態を null で管理しているなら、次のようにします。
if ($value === null) {
echo '値がありません';
}
まとめ
PHPの変数の初期化とは、変数を使う前に最初の値を入れておくことです。
基本的な初期値は次の通りです。
$name = ''; // 文字列
$count = 0; // 数値
$price = 0.0; // 小数
$items = []; // 配列
$isActive = false; // 真偽値
$user = null; // 値がまだない状態
PHPでは、変数を事前に宣言しなくても使えます。
しかし、未定義変数を参照すると警告が発生します。
特にPHP 8.0以降では、未定義変数や未定義配列キーの参照は E_WARNING の対象です。
そのため、実務では次のような考え方が大切です。
| 場面 | 初期化例 |
|---|---|
| 合計値を計算する | $total = 0; |
| 件数を数える | $count = 0; |
| エラーをためる | $errors = []; |
| フォームの初期表示 | $name = ''; |
| 検索結果を入れる | $results = []; |
| 条件によって値が変わる | $label = '未設定'; |
| オブジェクトやデータが未取得 | $user = null; |
また、isset()、empty()、is_null()、?? の違いも理解しておくと、より安全なコードを書けます。
特に重要なのは、次のポイントです。
isset()は、変数が存在し、かつnullでない場合にtrueempty()は、空文字、0、'0'、null、false、空配列などを空と判定するis_null()や=== nullは、値がnullかどうかを判定する??は、値が存在しない場合やnullの場合に初期値を設定できる- 配列キーの存在自体を確認したい場合は
array_key_exists()を使う - 型付きプロパティは、初期値を指定しないと未初期化状態になる
- nullable型でも、自動的に
nullが入るわけではない
変数の初期化は、PHPの基本でありながら、実務のバグを防ぐために非常に重要な考え方です。
変数を使う前に、目的に合った型の初期値を入れる。
この習慣を身につけるだけで、未定義変数、未定義配列キー、条件分岐による代入漏れなどのトラブルを大きく減らせます。
以上、PHPの変数の初期化についてでした。
最後までお読みいただき、ありがとうございました。










