© 2023 MNET LLC. All Rights Reserved.

僕的PHP備忘録:エラーは友達怖くない。その2

山下 生真

僕的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 著:小川 雄大、柄沢 宗太郎、橋口 誠

山下 生真

役員

建築家を志し京都の大学を卒業。様々な業種を経て、IT業界に心惹かれ、一心発起し、プログラミングスクールに業務の傍ら通う。趣味のYouTubeの動画編集・撮影活動で現CEOと出会う。幼少期からの夢であった”魔法使いになってみんなの役に立つ”実現の為、IT技術を駆使し、世の中の役に立つことを目標に起業。座右の銘は”野心・向上心”。

HOT TOPICS
人気の記事

全て見る