我的假设后跟基于假设的问题:
Javascript 有null
和undefined
. 您可以将变量设置为null
,表示它没有值,或者您可以将其设置为undefined
,表示不知道它是否有值 - 它根本没有设置。
PHP has null
,到目前为止,我使用的方式与null
在 Javascript 中使用的方式相同。PHP 是否具有等价物undefined
?
不是真的,undefined
在 PHP 中没有对应物。将 JSundefined
与 PHP进行比较null
并不能真正叠加,但它与您将要得到的一样接近。在这两种语言中,您都可以分配这些值/非值:
var nothingness = undefined;
$nothing = null;
并且,如果您声明了一个变量,但没有为其分配任何内容,那么 JS 会将 var 解析为undefined
,而 PHP 会解析(或分配)该变量null
:
var nothingness;
console.log(nothingness === undefined);//true
$foo;
echo is_null($foo) ? 'is null' : '?';//is null
但是要小心isset
:
$foo = null;
//clearly, foo is set:
if (isset($foo))
{//will never echo
echo 'foo is set';
}
知道变量是否存在的唯一真正get_defined_vars
方法,AFAIK,是使用:
$foo;
$bar = null;
$defined = get_defined_vars();
if (array_key_exists($defined, 'foo'))
{
echo '$foo was defined, and assigned: '.$foo;
}
我不认为有undefined
。而不是检查某些东西是否undefined
与 JavaScript 中的一样:
if(object.property === undefined) // Doesn't exist.
您只需使用isset()
:
if(!isset($something)) // Doesn't exist.
另外,我觉得你的理解undefined
有点奇怪。您不应该将属性设置为undefined
,这是不合逻辑的。您只想检查某些内容是否未定义,这意味着您尚未在范围内的任何地方定义它。isset()
遵循这个概念。
也就是说,您可以使用unset()
我认为与将某些内容设置为undefined
.
不,它只有“未设置”,实际上根本不是一个值。
undefined
是您在尝试访问不存在的属性/变量时将在 Javascript 中获得的值。您通常不会将某些内容设置为undefined
.
PHP 没有这种机制。如果您尝试访问不存在的属性或变量,则会触发 level 的错误E_NOTICE
。脚本将继续,但不存在的变量的值将替换为null
.
在 Javascript 中,您尝试访问一个变量并测试您是否获得了它undefined
。
在 PHP 中,您可以isset($var)
在访问变量之前测试它是否存在。
在某些情况下,这null
是一个有效值,并且需要一些其他数据类型来表示操作的结果。
例如,我有一个函数可以获取复杂/嵌套数组中某个键的值。键值可以是任何东西(包括null
)。如果密钥路径无效,在这种情况下我应该返回什么?返回null
, false
,-1
等没有任何意义,因为键值可能是其中之一。
我决定定义一个常量:
define("undefined", "__undefined__");
...
$value = getKeyValue($options, ["section", "subsection", "opt2"]);
if ($value != undefined) {
...
}