未定义是php中的数据类型吗?
未定义是php中的数据类型吗?,php,types,undefined,Php,Types,Undefined,未定义是php中的数据类型吗? 另外,如何检查它(在变量上,是或不是未定义的)?不,未定义在PHP中不是数据类型。您可以通过以下方式检查PHP中是否设置了变量(即先前定义的且不为null): 从文档中,isset()将: 确定变量是否已设置且不为空 要检查是否定义了变量,可以尝试以下操作: <?php if(isset($myvar)){ echo 'your variable is set as' . $myvar; }else{ echo 'your variable is not s
未定义
是php中的数据类型吗?
另外,如何检查它(在变量上,是或不是未定义的)?不,未定义在PHP中不是数据类型。您可以通过以下方式检查PHP中是否设置了变量(即先前定义的且不为
null
):
从文档中,isset()
将:
确定变量是否已设置且不为空
要检查是否定义了变量,可以尝试以下操作:
<?php
if(isset($myvar)){
echo 'your variable is set as' . $myvar;
}else{
echo 'your variable is not set';
}
?>
另外,据我所知,“未定义”在PHP中不是数据类型。在PHP中没有“未定义”的数据类型。您可以检查设置的变量,但这无法区分根本未设置的变量和具有null
值的变量:
var_dump(isset($noSuchVariable)); // false
$nullVariable = null;
var_dump(isset($nullVariable)); // also false
但是,您可以使用一种技巧来确定变量是否已定义,即使其值为null
:
var_dump(!!compact('noSuchVariable')); // false
var_dump(!!compact('nullVariable')); // true
isset
和compact
技巧同样适用于多个变量(使用逗号分隔的列表)
处理数组键时,可以轻松区分null
值和完全不存在:
$array = array('nullKey' => null);
var_dump(isset($array['nullKey'])); // false
var_dump(array_key_exists($array, 'nullKey')); // true
在处理对象属性时,还有一个,这相当于对象的
数组\u key\u存在。NULL
是未定义变量的隐式值。将不起作用,因为它忽略初始化为=NULL
的变量
要探测变量是否确实存在,必须使用变通方法:
if (in_array("varname", array_keys(get_defined_vars()))) {
没有未定义的,但有null
不同的yes。但是undefined
不是有效的数据类型,需要定义所有变量。作者:
$Foo = "Test";
if (isset($Foo))
{
echo "Variable Is Defined";
}
else
{
echo "Variable Is not Defined";
}
if (isset($UndefinedVar))
{
echo "Variable Is Defined";
}
else
{
echo "Variable Is Not Defined";
}
您对每条语句的输出为:
1) 定义了一个变量
2) 未定义变量
如果未定义的变量是PHP或任何编程语言中的有效数据类型,则需要具备处理变量的能力,因为本质上。。它们可能已经在使用中了(可能有点过头了)
这里有两种相当“简单”的方法来模拟您自己的未定义类型。由于函数调用的一些开销,它可以在代码中使用,而不需要使用关键字
在这两种情况下,让东西感觉像JavaScript似乎都很棘手
为了使要计算的对象为布尔false,第二种解决方案使用了一种与PHP处理SimpleXMLElement对象的方式相同的方法。但是,如果某些代码更改了undef2对象的XML值,同样的攻击可能会适得其反
不幸的是,当扩展SimpleXMLElement类时,神奇的函数uuToString()变得毫无用处。也许有另一个重载函数将返回一个自定义字符串,但我找不到它。虽然可能空字符串实际上更实用
有一些方法可能会使undef1类的计算结果为boolean false,但是扩展是beta版的,可能对PHP代码不可用
杂项说明:
对于实现ArrayAccess的自定义类来说,未定义的类型似乎很有意义,因为可以:
- 如果$value==未定义,则忽略元素的创建
- 如果未定义键或索引,则返回undefined
在上面的示例中,该类不限于单例。如果您愿意,您可以让它这样做:
你知道,var_dump()代码>可能会派上用场,而不是你对问题2的回答可能不正确。我将变量设置为未定义(并打印为未定义),当通过isset()时,isset返回true。@Colin,否,可能未定义为字符串,但PHP中没有未定义的变量类型。您要么声明自己的常量(即define('undefined',null);
),要么使用字符串'undefined'
。更不用说这个帖子里的每个人都给出了相同的答案……这是一个字符串。变量从json开始,在json中,它是一个无辜的、没有定义的小数据类型,然后,在转换为PHP数组时,它变成了字符串形式的冒名顶替者。我设置了变量(从isset返回true),但返回为未定义的
(从print\r和echo)。这种行为似乎与您所说的有些冲突。@ColinBrogan:这很可能是因为这些变量的字符串值“undefined”
。你为什么不自己去看看呢?没错,你就是乔恩。变量来自json,其中undefined是一种数据类型。然后,当json被转换为PHP数组时,它就变成了一个字符串。这就引起了我概念上的混乱。谢谢@向下投票人:请留下评论,帮助我改进这个答案。谢谢
$Foo = "Test";
if (isset($Foo))
{
echo "Variable Is Defined";
}
else
{
echo "Variable Is not Defined";
}
if (isset($UndefinedVar))
{
echo "Variable Is Defined";
}
else
{
echo "Variable Is Not Defined";
}
<?php
class undef1{function __toString(){return 'undefined';}}
function undef1(){
static $C;
if($C===null){$C = new undef1();}
return $C;
}
echo 'undef1 in string context : '; var_dump( undef1().'');
echo 'undef1 in boolean context: '; var_dump( !!undef1() );
echo 'undef1 compared to itself: '; var_dump( (undef1() === undef1()) );
class undef2 extends SimpleXMLElement{function __toString(){return 'undefined';}}
function undef2(){
static $C;
if($C===null){$C = new undef2('<C/>');}
return $C;
}
echo 'undef2 in string context : '; var_dump( undef2().'');
echo 'undef2 in boolean context: '; var_dump( !!undef2() );
echo 'undef2 compared to itself: '; var_dump( (undef2() === undef2()) );
?>
undef1 in string context : string(9) "undefined" // :)
undef1 in boolean context: bool(true) // :(
undef1 compared to itself: bool(true) // :)
undef2 in string context : string(0) "" // :( ?
undef2 in boolean context: bool(false) // :)
undef2 compared to itself: bool(true) // :)