
よろしくお願いします。
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのheader("Location:#pos")...
-
PHPのエラーの解消法について教...
-
セッション関数を使わずにファ...
-
PHP8でWarning:Undefined varia...
-
composerをインストールしたい...
-
フォームで戻った際に入力済み...
-
SplFileObject を利用したとき...
-
phpの問い合わせフォームを作っ...
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
-
PHPについて。
-
PHPからCSVをアップロード後、m...
-
[php初心者]サイトを見てデータ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
csvの内容を行単位で削除したい
-
C言語でCSVファイルの行数を読...
-
エラーメッセージ(無効な間接...
-
自動で番号を振りたい
-
別ファイルの構造体の値を読み...
-
行数が30万件ほどあるCSVから、...
-
Resource id #3 と表示されま...
-
PHP5でCSVの指定行データだけを...
-
バイナリファイルの内容を、そ...
-
複数行のデータのPOST処理に関して
-
PHPで、CSVファイルを、指定し...
-
配列同士の足し算のループ処理
-
stdClass Objectを連想配列のよ...
-
【PHP】csvファイルへの書き出...
-
PHPでCSVの一部の行を編集したい
-
phpでcsvファイルから二次元配...
-
ログファイルが一定行数を超え...
-
CSVでアップロードしたデータの...
-
CSVデータの行数カウントをした...
-
ヒアドキュメントの中のfor文
おすすめ情報