付録 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を調整するか、時間がかからないような処理に変更する |