【ワードプレス】問い合わせフォームから届く、ひたすら迷惑なスパムメールを防ぐ為には?
僕的PHP備忘録第6弾。プログラミングをしていると必ずと言っていい程付き合っていくことになる「エラー」。今回はエラーの種類やケースを知る事でどんなエラーが出ても「今どんなエラーを伝えようとしているのか?」を理解し、エラー箇所、解決が出来ない場合は検索の速度を上げることによってスムーズなプログラミングライフを送れるようにしましょう!
エラーとは
どんだけ慎重にコーディングをしていてもエラーは100%といっても過言ではないほど発生します。
エラーと上手く付き合うことで今後、強強エンジニアになるか弱弱エンジニアになるか変わってきます。
エラーは主に次の3つに分類されます。
・パースエラー(シンタックスエラー):PHPの文法を間違っている場合に発生するエラー
・実行時のエラー:実行が中断されるエラー(Fatal Errorなど)
・警告・注意 実行は継続するが警告があるエラー(WarningやNoticeなど)
エラーの種類とエラー定数
エラーは、重要度の高い順に、E_PARSE > E_ERROR > E_WARNING > E_NOTICE > E_DEPRECATED > E_STRICTがあり、その他にユーザエラーと呼ばれるエラーやプログラムの実行が終了しない警告程度のエラーのE_WARNINGやE_NOTICEがあります。
E_PERSE
このエラーはPHP上の文法を間違っている場合にでるエラーです。
末尾のカッコやセミコロンを付け忘れたりした際にでるエラーですので一番頻出するエラーと思います。
このエラーは対象のPHPファイルを読み込んだ段階で発生し、そのファイルは実行されずに終了します。
<?php
echo 'こんにちは';
$a = 1;
if($a == 1) { //閉じカッコがない
echo '$aに1が代入されています';
echo 'さようなら';
?>
上のプログラムを実行すると
Parse error: syntax error, unexpected '{' in index.php on line 6
の形のエラーが吐き出されます。
見方としてはindex.phpというファイルの6行目付近(on line 6)で何らかの文法エラーが発生してるよと見ます。
しかもこのエラーが出た場合は6行目以前のコードも実行されないため直ちに正しい文法に修正しましょう。
E_ERROR
このエラーは実行時に発生した致命的なエラーとなります。
例えば定義されていない関数や変数を呼び出したりするとこのエラーが吐き出されます。
<?php
echo '同じクラスを宣言する';
class example {}
class example {}
echo 'プログラムを終了します';
?>
上のプログラムを実行すると
同じクラスを宣言する
Fatal error: Cannot redeclare class example index.php on line 6
見方はファイル名(index.php)と行数(on line 6)は同じですね。
致命的なエラー(Fatal error)が発生していて内容は宣言したクラスを再度宣言することはできないよ(Cannot redeclare class)という意味になります。
また、E_PERSEと違うのはエラーが発生する箇所までのプログラムは実行されるという点です。
まとめ
エラーをしっかりと理解するのと理解しないのでが今後のプログラミングライフを過ごすのに大きな違いが出てきます。
初めは呪文のように感じるエラー文ですが基本的に要点を抑えているのは一部分になるのでいち早くエラーを伝えている箇所を見つけ快適なコーディングライフを送りましょう
参考資料:パーフェクト PHP 著:小川 雄大、柄沢 宗太郎、橋口 誠