Code Fix

初級

Warning: Undefined variable が出ても実行が止まらない理由

宣言していない変数を参照するとWarningが出ますが、PHPはこれをエラーとして扱わず実行を続けます。参照した箇所の値はnullとして扱われます。

なぜエラーが出ないのか

Warning: Undefined variable $userName in main.php on line 2
main.php
ファイル名
2
行番号
Warning
種別 — 実行は止まりません。メッセージが出力に混ざるだけです
Undefined variable $userName
内容 — 何が起きたか

このエラーが出る典型パターン

パターン1

 1  <?php
 2  echo $userName;
             ^
Warning: Undefined variable $userName in main.php on line 2出力に混ざるだけで実行は止まりません(期待: Al)

$userNameは一度も定義されていません。PHPはWarningを出すだけで実行を続け、その値はnullとして扱われます。

直し方: $userName を "Al" にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  <?php
 2  function greet() {
 3      echo $message;
                 ^
 4  }
 5  greet();
Warning: Undefined variable $message in main.php on line 3出力に混ざるだけで実行は止まりません(期待: Hello)

関数の中でも定義していない変数を参照すればWarningになります。実行は止まらず処理が先に進む点に注意してください。

直し方: $message を "Hello" にします。

この問題を解いてみる →

パターン3

 1  <?php
 2  $total = 0;
 3  $total = $total + $price;
                         ^
 4  echo $total;
Warning: Undefined variable $price in main.php on line 3出力に混ざるだけで実行は止まりません(期待: 50)

$priceは定義されていないため、足し算にnull(0扱い)が紛れ込みます。Warningが出ても処理は続行され、結果だけが静かにおかしくなります。

直し方: $price を 50 にします。

この問題を解いてみる →

パターン4

 1  <?php
 2  echo $cityName;
             ^
Warning: Undefined variable $cityName in main.php on line 2出力に混ざるだけで実行は止まりません(期待: Tokyo)

$cityNameは一度も定義されていません。PHPはWarningを出すだけで実行を続けます。

直し方: $cityName を "Tokyo" にします。

この問題を解いてみる →

パターン5

 1  <?php
 2  function describe() {
 3      echo $label;
                ^
 4  }
 5  describe();
Warning: Undefined variable $label in main.php on line 3出力に混ざるだけで実行は止まりません(期待: Book)

関数の中でも定義していない変数を参照すればWarningになります。実行は止まらず処理が先に進みます。

直し方: $label を "Book" にします。

この問題を解いてみる →

よくある誤解

「Warningが出たらプログラムはそこで止まっているはず」という思い込みは誤りです。PHPのWarningは出力に混ざるだけで、処理はそのまま先に進みます。気づかずに実行し続けてしまう危険があります。

実務での勘所

この警告の深刻度はPHP7ではE_NOTICE(最も軽微な部類)でしたが、PHP8ではE_WARNINGに格上げされました。さらに、この警告が実際に画面やログに出るかどうかは、error_reportingやdisplay_errorsという設定次第です。本番環境では警告の表示を意図的に抑制していることが多く、開発環境では見えていたはずのこの種のバグの兆候が、本番では完全に見えなくなっていることがあります。ログファイルには記録されている場合が多いので、動作がおかしいときは表示だけでなくログも確認する価値があります。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)