[解決済み] PHP で変数が存在するかどうかをテストする最良の方法; isset() は明らかに壊れています。
質問
から
isset()
ドキュメント
:
isset() will return FALSE if testing a variable that has been set to NULL.
基本的には
isset()
は、変数がまったく設定されていないかどうかをチェックするのではなく、変数に設定されているのが
NULL
.
そうすると、実際に変数の存在を確認するには、どのような方法が良いのでしょうか? というようなことを試してみました。
if(isset($v) || @is_null($v))
(その
@
が表示された場合の警告を回避するために必要です。
$v
が設定されていない)しかし
is_null()
と同様の問題があります。
isset()
を返します。
TRUE
という変数が設定されています。 とも見える。
@($v === NULL)
と全く同じ働きをします。
@is_null($v)
ということで、これもアウトです。
PHPで変数が存在するかどうかを確実にチェックするにはどうしたらいいのでしょう?
編集:PHPでは、設定されていない変数と、設定されている変数の間には、明らかに違いがあります。
NULL
:
<?php
$a = array('b' => NULL);
var_dump($a);
PHPでは
$a['b']
が存在し、その中に
NULL
の値を指定します。 追加した場合。
var_dump(isset($a['b']));
var_dump(isset($a['c']));
を使うと、私が言っているようなあいまいさがわかります。
isset()
関数を使用します。 以下は、これら3つの出力です。
var_dump()s
:
array(1) {
["b"]=>
NULL
}
bool(false)
bool(false)
さらに編集:2点。
1つは、使用例。 配列がSQLのデータになっていること
UPDATE
配列のキーはテーブルのカラム、そして配列の値は各カラムに適用される値です。 テーブルのカラムには、どれでも
NULL
を渡すことによって示される。
NULL
の値を配列で指定します。 あなたは
が必要です。
配列のキーが存在しないことと、配列の値が
NULL
これは、カラムの値を更新しない場合と、カラムの値を
NULL
.
2番目
Zoredacheの回答
,
array_key_exists()
は、私の上記の使用例とあらゆるグローバル変数に対して、正しく機能します。
<?php
$a = NULL;
var_dump(array_key_exists('a', $GLOBALS));
var_dump(array_key_exists('b', $GLOBALS));
を出力します。
bool(true)
bool(false)
この方法は、ほぼすべての場所を適切に処理するため、存在しない変数と
NULL
,
私が呼んでいるのは
array_key_exists()
は、PHP で変数の存在を確認するための公式の最も簡単な方法です。
.
(他に考えられるのは、クラスプロパティの場合だけです。
property_exists()
によると、これは
そのドキュメント
と同じような働きをします。
array_key_exists()
に設定されていないことと、設定されていることを適切に区別している点である。
NULL
.)
解決方法は?
チェックする変数がグローバルスコープにある場合は、このようにすることができます。
array_key_exists('v', $GLOBALS)
関連
-
[解決済み】SQLSTATE[42000]: 構文エラーまたはアクセス違反が発生しました。1064 SQL 構文にエラーがあります - PHP - PDO [重複]。
-
[解決済み】ある要素が可視DOMに存在するかどうかを確認するにはどうすればいいですか?
-
[解決済み】Chrome net::ERR_INCOMPLETE_CHUNKED_ENCODING エラーが発生しました。
-
[解決済み】mysqli_select_db()は、パラメータ1がmysqliであることを期待し、文字列が与えられる。
-
[解決済み】PHPの予期しないT_VARIABLEとは何ですか?
-
[解決済み] [Solved] Fatal error: メンバ関数 query() の null への呼び出し。
-
[解決済み] SSLエラー SSL3_GET_SERVER_CERTIFICATE:証明書の検証に失敗しました。
-
[解決済み] mysql_field_nameを新しいmysqliに変更します。
-
[解決済み】JavaScriptで文字列を変数名に変換する方法
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】XAMPPポート80をPID 4の「Unable to open process」が使用中 [重複] XAMPPポート80をPID 4の「Unable to open process」が使用中。]
-
[解決済み】空の配列要素を削除する
-
[解決済み】++と*+の意味は何ですか?
-
[解決済み】Phpのincludeが機能しない? 関数がincludeされない
-
[解決済み】メッセージ。Trying to access array offset on value of type null [重複]配列のオフセットにアクセスしようとしています。
-
[解決済み] * vchiqインスタンスを開くのに失敗しました。
-
[解決済み】PHPのクラスが見つからないが、インクルードされている
-
[解決済み】chromeの「net : Failed to load resource: net::ERR_SPDY_PROTOCOL_ERROR" は何がおかしいのか?
-
thinkphp5 timestamp 非整形の数値に遭遇した。
-
[解決済み】警告: file_get_contents(): https:// ラッパーがサーバー構成ですべて無効になっています。