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

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

ただいまの
回答率

90.47%

  • PHP

    20900questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 3
  • VIEW 3,226

japanese_ninja

score 247

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+4

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/08/12 16:27

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

    キャンセル

+3

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

同じタグがついた質問を見る

  • PHP

    20900questions

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