![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
よろしくお願いします。
PHPで変数が未定義であるというエラーが表示されてしまい困っています。
事前に $hensu = ""; と初期化できればいいのですが、そううまくもできない状況があります。
たとば、次のような場合です。
if (!$_GET['data']){ 処理
GETされているかどうかわからないけど、されていた場合の処理の分岐を記述したいので、事前に初期化できない状況です。
こうした場合、次のようにすることで未定義エラーは無視されるようです。
if (@!$_GET['tb']){
このアットマークによる回避方法でよいのでしょうか?ほかに方法があれば教えてください。エラーレポーティングのレベルを変えない方法でお願いします。
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貼ってもいいよね・・・(運営様に怒られても知らない
No.2
- 回答日時:
@によるエラー制御は、基本的に使わない方がいいですね。
//-- ローカル変数に落としてから…
$data = (isset($_GET['data'])) ? $_GET['data'] : '';
//-- バリデーション
if ($data === '') {
}
のようにすると、全体の見通しが良くなると思います。
ありがとうございます。
そうですよね、@はなんだか素人の自分でも禁じ手のような気がしますしプログラミングが上達しなそうです。
書き方のアドバイスについてもありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPの変わった閉じタグの必要性と意味を教えてください。 1 2022/08/28 15:15
- Excel(エクセル) エクセルの数式で教えてください。 3 2023/06/06 10:13
- Visual Basic(VBA) VBA リボンののリカバリーでオーバーフローエラーになります 2 2023/07/04 19:07
- 英語 提示した名言の"be to be able to do"の意味等について 4 2023/05/17 10:02
- C言語・C++・C# C言語:数値の桁数指定についての質問です。 8 2022/05/26 23:53
- UNIX・Linux bash環境でのエラー対応をお願い致します。 1 2022/11/26 17:41
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP phpでこの記述をもっと簡単に書く方法はないでしょうか…? 3 2022/11/16 19:57
- au(KDDI) 特定の画面を見るとスマホが固まります ご覧頂き有難うございます。 特定のページを見るとスマホが固まり 1 2023/08/21 19:29
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ヒアドキュメントの中のfor文
-
doxygenを使用する環境について
-
別ファイルの構造体の値を読み...
-
文字列の文字一文字ずつを解析...
-
PHPで外部ファイルを読み込むと...
-
複数行のデータのPOST処理に関して
-
rubyで複数列のデータを一行に...
-
二次元配列の削除
-
phpで日本語の文字列を抽出した...
-
絞り込んでランダム表示
-
CSVファイルの最終行のデー...
-
csvのソーティング
-
「test.php?」の後のデータの読...
-
クッキーがよくわかりません
-
指定文字を含むファイル名の取得
-
データ受け取り
-
DB参照して結果を出力する。
-
携帯絵文字変換スクリプトで20...
-
プルダウンメニューにDBの内容...
-
配列をループでたくさん宣言し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別ファイルの構造体の値を読み...
-
複数行のデータのPOST処理に関して
-
エラーメッセージ(無効な間接...
-
Resource id #3 と表示されま...
-
ヒアドキュメントの中のfor文
-
自動で番号を振りたい
-
C言語でCSVファイルの行数を読...
-
配列同士の足し算のループ処理
-
stdClass Objectを連想配列のよ...
-
PHPでCSVの一部の行を編集したい
-
phpを実行するとファイルダウン...
-
行数が30万件ほどあるCSVから、...
-
phpでCSVファイルの中身を多次...
-
php Undefined variableエラー
-
CSVデータの行数カウントをした...
-
csvの内容を行単位で削除したい
-
複数ファイルで、それぞれの行...
-
テキストデータから指定行の削除
-
rubyで複数列のデータを一行に...
-
PHP5でCSVの指定行データだけを...
おすすめ情報