Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未定义是php中的数据类型吗?_Php_Types_Undefined - Fatal编程技术网

未定义是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)      // :)