Нет. Даже игнорируя документацию, вы можете увидеть это сами
<code>echo '<pre>';
print_r( get_class_methods( new ArrayObject() ) );
echo '
';
Таким образом, у вас остается несколько вариантов. Один вариант, как вы говорите, это разыграть его
$a = new ArrayObject( array( 1, 2, 3 ) );
if ( in_array( 1, (array)$a ) )
{
// stuff
}
Какой, ИМО, лучший вариант. Вы могли бы использовать метод getArrayCopy (), но это, вероятно, дороже, чем операция приведения, не говоря уже о том, что выбор имел бы сомнительную семантику.
Если ваша цель - инкапсуляция, вы можете создать свой собственный подкласс ArrayObject
class Whatever extends ArrayObject
{
public function has( $value )
{
return in_array( $value, (array)$this );
}
}
$a = new Whatever( array( 1, 2, 3 ) );
if ( $a->has( 1 ) )
{
// stuff
}
Я вообще не рекомендую итерацию, это O (n), и просто не стоит этого, учитывая альтернативы.