付録 PHP エラー

よくあるエラーメッセージの原因と対策

errortype errormsg エラー概要
Warning Creating default object from empty value 未定義のまま参照するとエラー $object->foo->bar = 'baz'; new stdClassで定義する $object->foo = new stdClass; $object->foo->bar = 'baz';
Warning failed to open stream: No such file or directory 指定したファイルまたはディレクトリが見つからない
Warning Missing argument 1 for xxx() function foo($arg_1, $arg_2){ } と定義されているにも関わらず、 foo() と呼び出している
数字は引数の順番、1ならば1番目の引数、2ならば2番目の引数
Notice Array to string conversion Arrayをechoしている
Notice Call to undefined function xxx() 存在しないメソッドを呼び出している
該当のメソッドが有効になっていない
該当のメソッドがバージョンに対応していない
Notice Constant xxx already defined defineで設定した定数が多重定義されている
Notice Trying to get property of non-object 存在しないオブジェクトを呼び出している $baz = $object->foo->bar; 存在しない可能性がある場合は初期値を設定する if (empty($object->foo)) {     $object->foo = null; } $baz = $object->foo->bar;
Notice Undefined index: xxx 未定義のまま呼び出すとエラー echo $_GET['foo']; 未定義の可能性がある場合は分岐を入れる if (! empty($_GET['foo'])) { echo $_GET['foo']; }
Notice Undefined offset: xx 存在しないインデックスを呼び出している $arr = array('foo', 'bar', 'baz', 'qux', 'quux'); echo $arr['5'];
Notice Undefined property: xxx::$xxx() 指定したクラスが未定義
Notice Undefined variable: xxx 未定義のまま呼び出すとNoticeエラー echo $foo; 未定義の可能性がある場合は分岐を入れる if (! empty($foo)) { echo $foo; }
Notice Use of undefined constant xxx - assumed 'xxx' シングルクオートでくくらないとNoticeエラー echo $_GET[foo]; 必ずシングルクオートでくくる echo $_GET['foo']; $を付け忘れた場合やシングルクオートでのくくりにミスがあると同じNoticeエラー echo foo; echo 'foo; echo foo';
Parse error Class 'xxx' not found 存在しないクラスを呼び出している
Parse error Call to private method xxx::xxx() from context privateで定義されているメソッドを呼び出している
Parse error Call to undefined method xxx::xxx() クラスで定義されていないメソッドを呼び出している
Parse error syntax error, unexpected xxx 文法エラー
} が足りない if ($foo) } ; が足りない echo $foo " が足りない echo "foo; ) が足りない print_r(array('foo'); 全角スペースが入っている  $foo; 不要な文字が入っている echo $foo[; Eclipseなど文法をチェックするエディタを使っていれば文法エラーは発生しない
Fatal error Cannot redeclare xxx() メソッドが多重定義されている
Fatal error Cannot redeclare xxx::xxx() クラス内メソッドが多重定義されている
Fatal error Cannot redeclare class xxx クラスが多重定義されている
Fatal error Function name must be a string in xxx 関数に$がついている $empty($foo)
Fatal error Can't use method return value in write context 引数に関数が設定されている if (empty($request->getParam('foo'))) { 関数に置き換える $foo = $trim($request->getParam('foo')); if (empty($foo)) {
Fatal error Maximum execution time of 30 seconds exceeded タイムアウト
max_execution_timeを調整するか、時間がかからないような処理に変更する