- ベストアンサー
PHPの未定義エラーを回避する方法
- PHPで変数が未定義エラーが表示される場合、@マークを使用して回避することができます。
- 例えば、if文でGETされているかどうかを判定する場合、@マークを使用することでエラーが無視されます。
- ただし、エラーレポーティングのレベルを変えない場合に限り、@マークを使用することをおすすめします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
必要に応じてissetかemptyを使いましょう。 http://php.net/manual/ja/function.isset.php http://php.net/manual/ja/function.empty.php (1) if ($_GET['data']) ↓ if (!empty($_GET['data'])) (2) if (!$_GET['data']) ↓ if (empty($_GET['data'])) (3) if ($_GET['data'] != '') ↓ if (isset($_GET['data']) && $_GET['data'] != '') (4) if ($_GET['data'] == '') ↓ if (!isset($_GET['data']) || $_GET['data'] == '') POSTならまだしも、GETなら特に ~/test.php?data[hoge]=var とかするだけで簡単に配列も渡せてしまうので、厳密に "文字列" かどうかチェックしたい場合は (1) if (!empty($_GET['data']) && is_string($data = $_GET['data'])) (2) if (empty($_GET['data']) && is_string($data = $_GET['data'])) (3) if (isset($_GET['data']) && is_string($data = $_GET['data']) && $data !== '') (4) if (!isset($_GET['data']) || !is_string($data = $_GET['data']) || $data === '') (3)と(4)に関してはついでに途中で代入を同時に行って、$_GET['data']みたいな面倒な書き方しなくても、$dataだけで次から呼べるようにしてます。 こちらでは==演算子の代わりに===演算子を使ってます。 型が想定できていれば、可能な限りこちらを使うべきです。 ==演算子に関連したPHPの気持ち悪い挙動について http://bloggdgd.blog28.fc2.com/blog-entry-275.html #これぐらいならブログURL貼ってもいいよね・・・(運営様に怒られても知らない
その他の回答 (2)
- cheese014
- ベストアンサー率85% (12/14)
@によるエラー制御は、基本的に使わない方がいいですね。 //-- ローカル変数に落としてから… $data = (isset($_GET['data'])) ? $_GET['data'] : ''; //-- バリデーション if ($data === '') { } のようにすると、全体の見通しが良くなると思います。
お礼
ありがとうございます。 そうですよね、@はなんだか素人の自分でも禁じ手のような気がしますしプログラミングが上達しなそうです。 書き方のアドバイスについてもありがとうございます。
- yambejp
- ベストアンサー率51% (3827/7415)
普通はissetでチェックしますね if(isset($_GET["data"])){} ただ、dataが空だったらはじきたいとかなら中身のチェックは必要です if(isset($_GET["data"]) and $_GET["data"]!=="" ){}
お礼
ありがとうございます!!! なるほどissetなら通ります! ありがとうございました。
お礼
ありがとうございます。 とても丁寧な内容で参考になります。 命令が違う場合の書き換えがとくに参考になりました。