• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHP: 未定義エラーの回避方法を教えてください」)

PHPの未定義エラーを回避する方法

このQ&Aのポイント
  • PHPで変数が未定義エラーが表示される場合、@マークを使用して回避することができます。
  • 例えば、if文でGETされているかどうかを判定する場合、@マークを使用することでエラーが無視されます。
  • ただし、エラーレポーティングのレベルを変えない場合に限り、@マークを使用することをおすすめします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#244856
noname#244856
回答No.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貼ってもいいよね・・・(運営様に怒られても知らない

tuktukrace
質問者

お礼

ありがとうございます。 とても丁寧な内容で参考になります。 命令が違う場合の書き換えがとくに参考になりました。

その他の回答 (2)

  • cheese014
  • ベストアンサー率85% (12/14)
回答No.2

@によるエラー制御は、基本的に使わない方がいいですね。 //-- ローカル変数に落としてから… $data = (isset($_GET['data'])) ? $_GET['data'] : ''; //-- バリデーション if ($data === '') { } のようにすると、全体の見通しが良くなると思います。

tuktukrace
質問者

お礼

ありがとうございます。 そうですよね、@はなんだか素人の自分でも禁じ手のような気がしますしプログラミングが上達しなそうです。 書き方のアドバイスについてもありがとうございます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

普通はissetでチェックしますね if(isset($_GET["data"])){} ただ、dataが空だったらはじきたいとかなら中身のチェックは必要です if(isset($_GET["data"]) and $_GET["data"]!=="" ){}

tuktukrace
質問者

お礼

ありがとうございます!!! なるほどissetなら通ります! ありがとうございました。

関連するQ&A

専門家に質問してみよう