свой ArrayIterator, наследовать или реализовывать?

Лысый

Новичок
свой ArrayIterator, наследовать или реализовывать?

столкнулся с необходимостью создать класс реализующий ArrayAccess и Iterator - т.е. работающий как array
реализовал implements ArrayAccess, Iterator, но тогда специфические функции не узнают его объекты, как array и тд

как быть? наследовать ArrayObject и ArrayIterator ? или правильнее реализовывать интерфейсы? но как тогда добиться "узнавания"?
 

whirlwind

TDD infected, paranoid
Ничего непонял. А в каком случае "специфические функции узнавали объекты как array" ? И вообще про какой array ведется речь? Если implements ArrayAccess, Iterator, то объекты должны узнаваться и как ArrayAccess и как Iterator. Если Iterator толстый, то аггрегируй его экземпляр в [fix] классе, реализующем интерфейс [/fix] ArrayAccess.
 

demongloom

Новичок
Быть может имеется в виду type casting? т.е. перегрузка типа. Типа я передаю обьект пхп функции, а она видя что он наследует итераторы и аррэй акцесс, думает что это не обьект, а массив.
 

Arikon

Новичок
Лысый, если этим ты хочешь добиться, чтобы is_array($obj) возвращало true, у тебя ничего не выйдет.
Если нужно как-то проверять, передан ли массив или объект, "прикидывающимся массивом" (реализующий ArrayAccess) - делай двойную проверку
if (is_array($obj) || ($obj instanceof ArrayAccess && $obj instanceof Iteraror))
 

Лысый

Новичок
да спасибо
я именно так и решил проблему
хотя так и не понял что правильнее
реализовывать интерфейсы или наследовать класс которые их уже реализовал
 
Сверху