よろしくお願いします。
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ランキング
-
別ファイルの構造体の値を読み...
-
自動で番号を振りたい
-
Resource id #3 と表示されま...
-
配列同士の足し算のループ処理
-
phpでCSVファイルの中身を多次...
-
smartyでページングするには
-
◆速い、ファイル読み込みは?
-
PHPでサーバー上の書き換えたht...
-
PHP5でCSVの指定行データだけを...
-
phpメールフォームから送信され...
-
PHPでCSVの一部の行を編集したい
-
PHPでこのコード自体に意味は無...
-
$_SESSIONに二次元配列を使える...
-
postgresql関数をつかったレコ...
-
プログラミングのPythonのnoteb...
-
PHPのカッコ[ ]の使い方について
-
foreachのなかで次のキーを参照...
-
多次元配列を、1次元の配列にす...
-
PHP多次元配列で重複チェック
-
ファイルから指定行数分だけ読...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数行のデータのPOST処理に関して
-
Resource id #3 と表示されま...
-
別ファイルの構造体の値を読み...
-
PHPでCSVの一部の行を編集したい
-
バイナリファイルの内容を、そ...
-
CSVファイルの最終行のデー...
-
ヒアドキュメントの中のfor文
-
stdClass Objectを連想配列のよ...
-
◆速い、ファイル読み込みは?
-
C言語でCSVファイルの行数を読...
-
phpでCSVファイルの中身を多次...
-
rubyで複数列のデータを一行に...
-
多次元配列の一次元目の最大値...
-
行数が30万件ほどあるCSVから、...
-
配列同士の足し算のループ処理
-
csvの内容を行単位で削除したい
-
FortranのOPEN文
-
CSVデータの行数カウントをした...
-
自動で番号を振りたい
-
While文を使って配列の中身を全...
おすすめ情報