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()
;不需要序列化或的实例。