質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

10306閲覧

PHP:E_NOTICEエラーは放っておいても平気?

japanese_ninja

総合スコア196

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1グッド

3クリップ

投稿2014/07/25 17:42

PHPで開発をやっている者です。E_NOTICEが有効な状態で開発を進めています。

しかし最近、なぜE_NOTICEエラーは直さなければならないのか?と聞かれました。自分としては、直したほうがいいからとしか答えようがありませんでした・・・

エラーをわざわざ直す理由を教えていただけないでしょうか?
具体的には、コードが機能しているにも関わらず、管理者がお金を払ってまでこのエラーを直す必要があるのかということを教えてください。

退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

PHPの実行時設定に関するドキュメントを読むと、なぜE_NOTICEを有効にするといいのかが少しわかると思います。以下引用です。

開発時にE_NOTICEを有効にすることにはいくつ かの利点があります。デバッグのために、NOTICE メッセージはコード の中のバグの可能性について警告を与えます。例えば、代入されていな い値を使用した場合は、警告を発生します。 これは、書き間違いを見付け、デバッグの時間を節約するために非常 に有用です。NOTICEメッセージは、好ましくないコードに警告します。 例えば、$arr[item] は $arr['item'] と書く方が好ましいです。 これは、PHPが"item" を定数として取り扱うためです。 定数でない場合、PHPは配列の添字用の文字列と判断します。
(引用終わり)

もう少し詳しく説明します。E_NOTICEを有効にする理由は3つあります。

①打ち間違えを発見する

E_NOTICEエラーの主な原因は打ち間違えです。

<?php $name = 'joe'; // (下にスクロールしていくと・・・) if ($nam) { // 打ち間違えです。$namはnullになります。 echo "ログインしました"; } else { echo "ログインしてください"; } ?>

E_NOTICEが無効な場合の出力

ログインしてください.....

これは違いますよね。

E_NOTICEが有効な場合の出力

Notice: Undefined variable: nam in /foo/bar/baz.php on line ...
ログインしてください

PHPでは、存在しない変数はエラーになるのではなくnullとして返されることが多く、それによってコードが思うように動作しないことがあるので、E_NOTICE警告には従ったほうがいいです。

②あいまいな配列の添え字を発見してくれる

変わってしまう可能性のある配列の添え字について、警告を出してくれることもあります。

例として以下のコードをあげます:
あるコードは当初はこのようなものだったとしましょう。

<?php $arr = array(); $arr['name'] = joe'; // 下までスクロールすると echo $arr[name]; ?>

E_NOTICEが無効の場合の出力

joe

ある日このコードにライブラリを付け足したとします。

<?php // この直後にライブラリが付け足されています include_once('lib.php'); $arr = array(); $arr['name'] = 'joe'; // 下までスクロールすると echo $arr[name]; ?>

ライブラリはこのように書いてあったとします

<?php define("name", "Mary"); ?>

$arr[name]は$arr[Mary]に展開されてしまいます。

しかし$arrの中にMaryというキーがありません。

E_NOTICEが有効な場合の出力

開発者がE_NOTICEを有効にしていたならば、PHPは次のようなエラーメッセージを出力したでしょう:

Notice: Use of undefined constant name - assumed name' in /foo/bar/baz.php on line ...
joe

③最大の理由
E_NOTICEエラーを直さずに放っておいたら、あなたはどんどん独りよがりになっていき、警告を無視するようになるでしょう。そんなときに本当にエラーが起きたとしても、あなたは気づかないでしょう。
だから、E_NOTICEエラーは直されるべきなのです。

投稿2014/07/27 02:30

raou

総合スコア463

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

japanese_ninja

2014/08/12 07:27

丁寧な回答ありがとうございました!
guest

0

E_NOTICEを有効にすると
バグの可能性のあるコードが表示されるので、
バグの可能性を減らす為にE_NOTICEを付けると良いです。

また、設定が変えられないサーバーに移動したら動かなくなったとか、
バージョン変えたら動かなくなったという事も減らせます。
PHPのE_NOTICEがどうか走りませんが、一般にwarningは
最適化が効かない等で遅くなる事を防ぐ事もあり得ます。

このバグの可能性や性能の問題を潰す必要がないのであれば、修正する必要はないでしょう。
しかし、長く保守していく安全性の高いシステムを維持したいのであれば、修正した方が良いでしょう。

投稿2014/07/27 09:06

h_sakurai

総合スコア228

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問