PHPのエラー『Notice: compact(): Undefined variable found』の解決方法

  • 作成日 2025.05.18
  • php
PHPのエラー『Notice: compact(): Undefined variable found』の解決方法

PHPでcompact()関数を使用した際に「Notice: compact(): Undefined variable found」というエラーが発生することがある。このエラーが発生する原因や解決策について詳しく説明する。

エラーの発生条件

compact()関数は、指定された変数名のリストから連想配列を作成する。しかし、リストに含まれる変数が定義されていない場合、このエラーが発生する。

エラーの再現コード

<?php
$name = "John";
$data = compact('name', 'age'); // 'age'は未定義のためエラー
print_r($data);
?>

エラーメッセージの例

Notice: compact(): Undefined variable $age found in /path/to/script.php on line X

解決策1: 変数が定義されているか確認

事前に変数を定義し、初期値を設定しておく。

<?php
$name = "John";
$age = null; // 未定義エラーを防ぐ
$data = compact('name', 'age');
print_r($data);
?>

解決策2: 変数が存在する場合のみcompact()に渡す

isset()を使用して、変数が定義されている場合のみcompact()を実行する。

<?php
$name = "John";
if (isset($age)) {
    $data = compact('name', 'age');
} else {
    $data = compact('name');
}
print_r($data);
?>

解決策3: array_filter()とget_defined_vars()を活用

get_defined_vars()を使用し、未定義の変数を除外する方法。

<?php
$name = "John";
$variables = ['name', 'age'];
$data = array_filter(get_defined_vars(), fn($key) => in_array($key, $variables), ARRAY_FILTER_USE_KEY);
print_r($data);
?>

解決策4: compact()の仕様を変更したPHPバージョンに注意

PHP 7.3以降では、未定義の変数が含まれる場合にエラーが発生する仕様になった。それ以前のバージョンでは、未定義の変数は無視されるため、バージョンを確認することも重要。

まとめ

  • compact()に未定義の変数を渡すとエラーになる
  • 変数を事前に定義する、isset() でチェックするなどの対策が有効
  • PHPのバージョンによって挙動が異なるため、注意が必要