error_reporting=E_ALL のススメ

初歩ではありますが、error_reporting = E_ALL ^ E_PHP_NOTICE な環境に慣れている人のためのコーディングルールを探してもすぐに見つけられなかったため、書いておきます。
 
□変数は代入してから使うこと
定義済みの(値が入っている)変数のみ参照するべきです。
もしもグローバル変数など、値が入っているかわからない場合は isset() や empty() で存在を確認しましょう。接頭文字 @ を使ってもいいですが、 isset() や empty() のほうが望ましいです。
なお、null を代入した変数も定義済みの変数です。

<?php
// —————–
// 未定義の変数参照
// —————–
// NG
echo $foo; // PHP Notice: Undefined variable: foo
// ——–
// OK
$foo = “abc”;
echo $foo;

 
□配列、連想配列の要素も存在するもののみ参照すること
配列の要素の一つ一つについても、変数同様に定義済みのもののみ参照しましょう。
リクエスト値など、値が入っているかわからない場合は isset() や empty() で存在を確認しましょう。

<?php
// —————–
// 未定義の配列要素/連想配列要素の参照
// —————–
// NG
$id = $_GET[‘id’]; // PHP Notice: Undefined index: id (引数省略リクエストの場合)
// ——–
// OK ※省略不可能なパラメータの場合
if(empty($_GET[‘id’])){ // または if( !isset($_GET[‘id’]) )
// エラー処理
exit;
}
$id = $_GET[‘id’];
// ——–
// OK-2 ※省略可能なパラメータの場合
$id = isset($_GET[‘id’])? $_GET[‘id’]: null;

 
□定数の定義方法に注意しましょう。
定数の定義関数は

define(定数名文字列, 値)

です。
第一引数はシンボルではなく文字列です。’〜’ や “〜” で括ることを忘れないようにしましょう。

<?php
// —————–
// 未定義の定数参照(定義時)
// —————–
// NG
define(FOO, 123); // PHP Notice: Use of undefined constant FOO – assumed ‘FOO’
// ——–
// OK
define(“FOO”, 123);

 
□文字列中の連想配列のキー指定時もクォーテーションにも注意

“{$assoc[key]}”

は key が定数値とみなされます。
連想配列のキーをダブルクォーテーションまたはシングルクォーテーションで囲むようにしましょう。

<?php
// —————–
// 未定義の定数参照(文字列内での連想配列参照)
// —————–
// NG
$foo=array();
$foo[“name”] = ”John”;
echo “{$foo[name]}\n”; // Use of undefined constant name – assumed ‘name’
// ——–
// OK
$foo=array();
$foo[“name”] = ”John”;
echo “{$foo[‘name’]}\n”;