はじめに
エラーって、ちゃんと導いてくれてるんだなと最近感じたのでメモついでに書いておきます。
エラー表
下記のエラーは上から順に重要度が高いエラーとなる。
種類 | 内容 | 動作 |
---|---|---|
E_PARSE | シンタックスエラー(文法エラー、構文エラー) | 処理が実行されない |
E_ERROR | 実行時の致命的なエラー | エラー発生箇所で処理停止 |
E_WARNING | 実行時に発生した重い問題の警告 | 処理継続 |
E_NOTICE | 実行時に発生した軽い問題の警告 | 処理継続 |
E_DEPRECATED | 非推奨で将来的には配される関数や文法がある場合の警告 | 処理継続 |
E_STRICT | 互換性維持のために発する警告 | 処理継続 |
E_PARSE: シンタックスエラー
エラー文
Parse error: syntax error, unexpected 'hoge' in /path/to/file.php on line 1
説明
文法エラーや構文エラーなどのシンタックスエラーによって発生するエラー。
主に、セミコロンやカッコが足りなかったりした時に発生する。
上記の文法や構文の不足により、このままPHPファイルとして正常に実行することができないため、E_PARSE
が発覚した時点でPHPファイルの読み込みが終了する。
対処法
エラー分のどのファイルの何行目の何でエラーが出ているかがわかるので、その箇所を確認する。
上記を見てもわからない場合は、よくある条件分岐などで中括弧({}
)がなかったり、文末のセミコロン;
がなかったりしていないかを確認する。
E_ERROR: 致命的なエラー
エラー文
Fatal error: Cannot redeclare class hoge in /path/to/file.php on line 1
説明
定義されていない関数の呼び出しや、すでに定義されているクラスや関数の再定義によって発生するエラー。
このエラーの場合、ファイルの読み込みはされているが、このエラーが出た時点で処理が終了するため処理は完了しない。
対処法
エラー文に表示されているファイルの行数目の箇所を確認し、再定義やスペルミスがないかを確認。
関数名やメソッド名を間違えているケースがよくある。
E_WARNING: 警告
エラー文
PHP Warning: hoge() expects at least 1 parameter, 0 given in /path/to/file.php on line 1
説明
呼び出す関数の引数不足や型の不一致によって発生するエラー。
このエラーが発生すると、呼び出されている関数、式や評価の文の実行は停止する。
処理自体は続行するため、停止した処理の情報がそのあとの処理で不要なものだった場合は処理自体は正常に動作し、必要なものの場合は正常に動作しない場合がある。
対処法
エラー文に書いてある箇所で、呼び出し時に渡している引数と実際の引数が正しいかを確認。
引数の数があっている場合、var_dump
で実際にどの型が引数として送られてきているのかを確認することも必要。
E_NOTICE: 警告
エラー文
PHP Notice: Undefined variable: hoge in /path/to/file.php on line 5
説明
未定義変数を利用していたり、関数の引数がおかしかったりする時に発生するエラー。
E_WARNING
と似ているが、修正の重要度が低い。
E_NOTICE
の場合は、警告が発生したとしても、エラーに対してPHP側で自動的に対処を施される。例えば、未定義の変数の場合はnullが値として入る。
対処法
エラー文で何が間違っているか丁寧に書いてあるため、どこの何がおかしいのかをよく確認する。
E_DEPRECATED: 非推奨
エラー文
PHP Deprecated: Function hoge_foo() is deprecated in /path/to/file.php on line 1
説明
PHPのバージョンで将来的に廃止となることから非推奨となっている文法や関数を使用していた場合に発せられるエラー。
実際に廃止されるまでは、警告は出続けるが処理は止まらず、プログラムにも影響はない。
しかし、メンテナンスしなければいけないため、変更することが推奨される。
対処法
非推奨となっていない関数を使用するか、別のロジックで処理を書くように修正する。
E_STRICT: 互換性維持
エラー文
Strict Standards: Redefining already defined constructor for class hoge in /path/to/file.php on line 1
説明
同じクラス内で複数のPHPバージョンのクラスコンストラクタの定義の方法を実行すると発するエラー。
処理は最後まで実行される。
対処法
PHPのバージョンなどでのエラー箇所の構文などを確認して、バージョンで異なることをしていないかを確認する。
まとめ
プログラミングを始めた時はエラーがたくさん出て嫌になることが多いと思います。
そんな時に「あ、このエラーはこういうことな気がする」というように仮説を立てて対処していけると、解決までの時間が早くなってさらにたくさんのコードを書けるようになると思います。
エラー文をしっかり見ることは大切なので、とりあえず何か問題が発生したらエラーが吐き出されていないかを確認するようにしましょう。