
よろしくお願いします。
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ランキング
-
C言語でCSVファイルの行数を読...
-
【PHP】csvファイルへの書き出...
-
PHPでCSVの一部の行を編集したい
-
行数が30万件ほどあるCSVから、...
-
While文を使って配列の中身を全...
-
readdirで文字化け
-
CSVデータから配列に・・・。
-
phpで日本語の文字列を抽出した...
-
PHPからCSVをアップロード後、m...
-
ブログのトラックバックについて
-
CSVでアップロードしたデータの...
-
CSVファイルの最終行のデー...
-
PHP、CSVファイルの日本語デー...
-
FortranのOPEN文
-
PHP 別ドメインへのファイル保存法
-
オブジェクトと文字列の比較
-
CSVデータを使ったページングと...
-
PHPからファイルをPOSTしたい
-
UTF-8のXMLがSJISのPHPで文字化け
-
PHPで外部ファイルを読み込むと...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別ファイルの構造体の値を読み...
-
C言語でCSVファイルの行数を読...
-
Resource id #3 と表示されま...
-
【PHP】csvファイルへの書き出...
-
CSVファイルの最終行のデー...
-
行数が30万件ほどあるCSVから、...
-
自動で番号を振りたい
-
doxygenを使用する環境について
-
PHP検索ボックス複数設置
-
stdClass Objectを連想配列のよ...
-
ヒアドキュメントの中のfor文
-
PHP SimpleXml unsetについて
-
複数行のデータのPOST処理に関して
-
エラーメッセージ(無効な間接...
-
PHPでCSVの一部の行を編集したい
-
ログファイルの古い日付の行を...
-
配列同士の足し算のループ処理
-
多次元配列の一次元目の最大値...
-
文字列の文字一文字ずつを解析...
-
複数ファイルで、それぞれの行...
おすすめ情報