2016-06-29 5 views
2

Класс ArrayObject позволяет объектам работать как массивы. Когда я проверяю, если ArrayObject пуст, хотя, результат всегда ложноPhp - пустой ArrayObject

echo empty(new ArrayObject()); // returns false 

Не было бы более последовательным поведением пустого массива [], если он возвращается true?

ответ

6

PHP ArrayObject не является взаимозаменяемым с массивами. Большинство связанных с ним функций не будут работать с ним.

Конструкция empty() определяет только то, является ли заданное значение falsy (при игнорировании неопределенных ошибок переменных/индексов). Экземпляр ArrayObject оценивает значение true, когда он передается в булево.

Это будет работать для обоих массивов и ArrayObject с (так как они реализуют Countable):

if (!sizeof($variable)) { 
    // $variable is an empty array or empty ArrayObject 
} 

(.. На мой взгляд, это хорошая вещь PHP определенно не нужно больше магии)

+0

(По-моему, стыдно, что PHP не имеет более обобщенной и равномерной перегрузки оператора (да, 'empty' по сути является оператором), но ... о, ну ...) – deceze

+0

Согласен. Возможность перегрузить '(bool) $ object' может сделать эту работу (игнорируя, насколько она плоха/хороша на данный момент). – ShiraNai7

Смежные вопросы