isset() 函数不检查是否定义了变量。
您似乎已明确表示您不是在问题中寻找isset()。我不知道为什么有这么多答案说isset() 是要走的路,或者为什么接受的答案也这么说。
在编程中认识到 null 是很重要的。我不知道为什么决定 isset() 如果值为 null 将返回 false。
要检查变量是否未定义,您必须使用get_defined_vars() 检查变量是否在已定义变量列表中。没有等效于 JavaScript 的 undefined (这是问题中显示的内容,那里没有使用 jQuery)。
在以下示例中,它的工作方式与 JavaScript 的未定义检查相同。
$isset = isset($variable);
var_dump($isset); // false
但在这个例子中,它不会像 JavaScript 的未定义检查那样工作。
$variable = null;
$isset = isset($variable);
var_dump($isset); // false
$variable 被定义为 null,但 isset() 调用仍然失败。
那么你如何实际检查变量是否已定义?你检查定义的变量。
使用get_defined_vars() 将返回一个关联数组,其中键作为变量名,值作为变量值。这里还是不能用isset(get_defined_vars()['variable']),因为key可能存在,value还是null,所以必须用array_key_exists('variable', get_defined_vars())。
$variable = null;
$isset = array_key_exists('variable', get_defined_vars());
var_dump($isset); // true
$isset = array_key_exists('otherVariable', get_defined_vars());
var_dump($isset); // false
但是,如果您在代码中发现必须检查变量是否已定义,那么您可能做错了什么。这是我个人的看法,为什么核心 PHP 开发人员离开 isset() 在某些内容为空时返回 false。