PHP:E_NOTICEエラーは放っておいても平気?
解決済
回答 2
投稿
- 評価
- クリップ 3
- VIEW 7,560
しかし最近、なぜE_NOTICEエラーは直さなければならないのか?と聞かれました。自分としては、直したほうがいいからとしか答えようがありませんでした・・・
エラーをわざわざ直す理由を教えていただけないでしょうか?
具体的には、コードが機能しているにも関わらず、管理者がお金を払ってまでこのエラーを直す必要があるのかということを教えてください。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+4
開発時に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エラーは直されるべきなのです。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+3
バグの可能性のあるコードが表示されるので、
バグの可能性を減らす為にE_NOTICEを付けると良いです。
また、設定が変えられないサーバーに移動したら動かなくなったとか、
バージョン変えたら動かなくなったという事も減らせます。
PHPのE_NOTICEがどうか走りませんが、一般にwarningは
最適化が効かない等で遅くなる事を防ぐ事もあり得ます。
このバグの可能性や性能の問題を潰す必要がないのであれば、修正する必要はないでしょう。
しかし、長く保守していく安全性の高いシステムを維持したいのであれば、修正した方が良いでしょう。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.20%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2014/08/12 16:27