いいえ。ドキュメントを無視しても、自分の目で確認できます
echo '<pre>';
print_r( get_class_methods( new ArrayObject() ) );
echo '</pre>';
したがって、選択肢はほとんどありません。あなたが言うように、1つのオプションはそれをキャストすることです
$a = new ArrayObject( array( 1, 2, 3 ) );
if ( in_array( 1, (array)$a ) )
{
// stuff
}
これは、IMO、最良の選択肢です。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) であり、代替案を考えるとそれだけの価値はありません。