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が出ても処理は続行され、結果だけが静かにおかしくなります。

直し方: $price50 にします。

この問題を解いてみる →

よくある誤解

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

まとめ

Warning: Undefined variable が出ても実行が止まらない理由は初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

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