Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.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 等于新的ArrayObject_Php - Fatal编程技术网

Php 等于新的ArrayObject

Php 等于新的ArrayObject,php,Php,我有一个变量被指定为新的ArrayObject $var = new ArrayObject(); 我想检查此变量是否属于ArrayObject类型,以及是否处于新实例化状态(相同的属性值和结构)。一种方法似乎是使用非严格评估而不是= if ($var == new ArrayObject) { echo 'true'; } 考虑到PHP的疯狂特性,我不知道==是否只是检查两者是否都是简单的对象。我想要一种更严格的检查方法 gettypesimple返回无用的Object EDIT:is_a

我有一个变量被指定为新的
ArrayObject

$var = new ArrayObject();
我想检查此变量是否属于
ArrayObject
类型,以及是否处于新实例化状态(相同的属性值和结构)。一种方法似乎是使用非严格评估而不是
=

if ($var == new ArrayObject) { echo 'true'; }
考虑到PHP的疯狂特性,我不知道
==
是否只是检查两者是否都是简单的对象。我想要一种更严格的检查方法

gettype
simple返回无用的
Object

EDIT
is_a()
似乎可以正确检测类型,但如何检查$var是否处于新实例化的状态

if (is_a($var, 'ArrayObject')) { echo 'true'; }
您可以使用的方法检查:

请参阅以下代码():

$arr1 = new ArrayObject([1,2,3]);
$arr2 = new ArrayObject();
$arr3 = 'HelloWorld';

var_dump(isInitArrayObject($arr1)); //false
var_dump(isInitArrayObject($arr2)); //true
var_dump(isInitArrayObject($arr3)); //false

function isInitArrayObject($arr1) {
    if (!($arr1 instanceof ArrayObject)) {
        return false;
    } else {
        $arr_init = new ArrayObject();
        return ($arr1->serialize() === $arr_init->serialize());
    }
}

您可以这样做:

$arr1 = new ArrayObject([1,2,3]);
$arr2 = new ArrayObject();
$arr3 = 'HelloWorld';

var_dump((array) $arr1 == (array) new ArrayObject());
var_dump((array) $arr2 == (array) new ArrayObject());
var_dump((array) $arr3 == (array) new ArrayObject());

为什么要使用ArrayObject而不是Array?
json\u encode
稍后输出空字典而不是arrayuse is\u object()函数,如何检查$var是否处于新实例化状态?请尝试使用
isset
Nice。检查两个对象的类似方法是使用json_encode将ArrayObject实例转换为json对象,然后按字符串比较它们;echo(序列化($x)。“\n”)$x[1]=0;echo(序列化($x)。“\n”);未结算($x[1]);echo(序列化($x)。“\n”)。在
unset($x)
之后,
isInitArrayObject($x)
返回
TRUE
,但同样做一个简单的比较:
$x==new ArrayObject()
;不需要序列化或的实例。