【ワードプレス】問い合わせフォームから届く、ひたすら迷惑なスパムメールを防ぐ為には?
僕的PHP備忘録第7弾。前回はE_PERSEとE_ERRORの紹介をしました。
今回はE_WARNINGとE_NOTICEの紹介をしていきます。
E_WARNING
E_WARNINGは実行時に発生する警告です。警告が発生した時点の式や文の実行は止まりますが、実行は継続されます。ですのでプログラムが予期しない動きをし正常に動作しない場合があるのでバグの原因にもつながります。例えば関数の引数の数を間違えていたり型を間違えていたりです。
<?php
echo 'こんにちは';
$ret1 = array_reverse(); //引数の間違いの場合
$ret2 = array_reverse(1); //引数の型の間違いの場合
echo 'さようなら';
?>
上のプログラムを実行すると
こんにちは
PHP Warning: array_reverse() expects at least 1 parameter, 0 given in index.php on line 5
PHP Warning: array_reverse() expects parameter 1 to be array, integer given in index.php on line 6
さようなら
の形のエラーが吐き出されます。
見方としてはindex.phpというファイルの5行目付近(on line 5)と6行目付近(on line 6)でWarning関連のエラーが発生しています。
array_reverse()関数の呼び出し方を間違えているのでarray_reverse()の関数が呼ばれずに処理が継続されます。
関数からの返り値で変数を格納する場合、変数がnullになるので変数を参照する箇所に来た時に予期せぬ動きになります。
バグの原因になりますのでWarningのエラーもしっかりと対処しましょう。
E_NOTICE
このエラーも実行時の警告ですが、E_WARNINGよりも重要度は低めです。
この警告が発生した場合は、警告は発生させますがPHP側で自動的に対処を施します。
<?php
echo 'こんにちは';
echo (int)$hensu;
echo 'さようなら';
?>
上のプログラムを実行すると
こんにちは
PHP Notice: Underfined variable: hensu in index.php on line 5
0
さようなら
E_NOTICEのエラーはPHPが自動的に何かしらの対処を施します。初期化されていない変数を使用するとnullになります。(例では結果を表示するために整数型にキャストをしています)
この警告は重要度は高くないですがエラーが出るコードは好ましくないのでしっかりと対処をしましょう。
まとめ
その1の記事に比べるとプログラムが停止するようなエラーではないですがそれでも
発生するとバグに繋がってくるのでしっかりと対処して快適なプログラミングライフを送りましょう
参考資料:パーフェクト PHP 著:小川 雄大、柄沢 宗太郎、橋口 誠