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のバージョンによって挙動が異なるため、注意が必要
-
前の記事
Railsのエラー『ActiveRecord::StatementInvalid: SQLite3::SQLException』の解決方法 2025.05.16
-
次の記事
Railsのエラー『ArgumentError: AfterCommit callback can only be defined on the root class』の解決方法 2025.05.19
コメントを書く