他の回答があなたの直接の質問に答えていますが、ここには説明すべきもっと深いものがあると思います.
通常、存在することが確実でない配列インデックスへのアクセスは避けたいと考えます。
例えば:
$a = array('foo' => 'bar');
echo $a['test']; //bad!
同じことが $_GET、$_POST、$_COOKIE などにも当てはまります。インデックスが存在することがわかっている場合を除き、インデックスにアクセスしないでください。
ユーザー定義のインデックスの場合、これは「インデックスが存在することを確認しない限り、インデックスにアクセスしない」という意味になることに注意してください。
$content = $_GET['content']; //ALWAYS wrong
配列インデックスをチェックするには、isset、empty、および array_key_exists の 3 つのオプションがあります。
isset($x)
$x が null でない場合に true を返します。 isset が未定義のインデックス/変数通知を発行しないことを除いて、isset
本質的には: と同等です。$x !== null
(empty($x) === (!isset($x) || !$x))
つまり、空の場合、おおむね false に等しいものはすべて空であると見なされます。これは特定の状況で役立ちます。
array_key_exists($key, $array)
$array[$key]
未定義のインデックス通知を発行しないという単純な保証です。
では、適切な方法でユーザー入力を抽出する最も簡単な方法は何でしょうか?
$content = (isset($_GET['content'])) ? $_GET['content'] : null;
$content !== null
ユーザーが入力を提供した場合、この時点で重要な保証があります。
また、変数を未定義のままにする実行パスを持たないようにする必要があることに注意してください。
if (isset($_GET['content'])) {
$content = $_GET['content'];
}
echo $content; //WRONG - $content is not guaranteed to be defined
$content が isset または空でラップされている場合は、その状況で使用できますが、コードの可読性が妨げられます。ある条件下で変数を未定義のままにしたい場合は、null として定義します。variable does not exist 警告を発行せずに「未定義」のままにします。
$a = null;
var_dump($a === $b); //true, because the non-existent $b is treated as false
//(note that this is terrible style though -- this would issue a variable doesn't exist warning for $b
もちろん、PHP のフィルター拡張機能もあります。特に、 filter_inputを使用すると、ユーザー入力を処理するための多くのコードを書き直す必要がなくなります。
適切な (または、パラノイアと呼ぶ人もいるかもしれませんが) 入力処理の詳細については、ここまたはここの適切なセクションを参照してください。
余談ですが、常にエラーを最大限に発生させて開発する必要があり、あらゆる種類のエラー (警告、通知など) を監視する必要があります。これは、潜在的な論理バグを防ぐのに役立ち、コードをきれいに保つ傾向があります。(通知を発行しないコードとよく書かれたコードの間には相関関係があるようです。)