1. ホーム
  2. php

[解決済み] PHP で変数が存在するかどうかをテストする最良の方法; isset() は明らかに壊れています。

2022-04-24 08:41:04

質問

から 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)