2016-11-18 3 views
2

У меня есть переменная, которая назначена в качестве нового ArrayObjectРавный к новому ArrayObject

$var = new ArrayObject(); 

Я хочу, чтобы проверить, если эта переменная имеет тип ArrayObject и находится в недавно реализованным состоянии (ценности же собственности и структура). Один из способов, как представляется, с применением не строгая оценкой == вместо ===

if ($var == new ArrayObject) { echo 'true'; } 

Учитывая сумасшедший подводных камней РНР я не знаю, если == просто проверки, если оба просто объекты или что. Я хочу более строгий способ проверки.

gettype простой возврат Object который не подходит.

EDIT: is_a(): Кажется, правильно определяет тип, но как же тогда я могу проверить, является ли $ var во вновь создаваемом состоянии?

if (is_a($var, 'ArrayObject')) { echo 'true'; } 
+0

Почему вы используете ArrayObject вместо o f Массив? – p3tch

+0

'json_encode' позже для вывода пустого словаря вместо массива – myol

+1

использовать функцию is_object() – RJParikh

ответ

1

Вы можете использовать метод serialize из ArrayObject проверить:

Смотрите следующий код (http://ideone.com/Frx0EH):

$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()); 
    } 
} 
+0

Ницца. Аналогичным способом проверки двух объектов является преобразование экземпляров ArrayObject в объект json с использованием json_encode, а затем сопоставление по строкам. – Werner

+0

Попробуйте использовать следующий код: '$ x = new ArrayObject(); эхо (сериализации ($ х) "\ п".); $ x [1] = 0; эхо (сериализации ($ х) "\ п".); переменная не установлена ​​($ х [1]); эхо (сериализации ($ х) "\ п".) '. После 'unset ($ x)', 'isInitArrayObject ($ x)' возвращает 'TRUE', но то же самое делает простое сравнение:' $ x == new ArrayObject() '; нет необходимости в сериализации или 'instanceof'. – axiac

0

Вы можете сделать так:

$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()); 
Смежные вопросы