いいえ。ただしArrayAccess
、クラスを配列として使用できるインターフェイスがあります。ループ機能を取得するforeach
には、インターフェイスIteratorAggregate
またはIterator
. 1 つのメソッド ( のインスタンスを提供する) をオーバーライドするだけでよいため、使用している内部配列がある場合は前者の方が使いやすいですArrayIterator
が、後者では反復処理をより細かく制御できます。
例:
class Messages extends ArrayAccess, IteratorAggregate {
private $messages = array();
public function offsetExists($offset) {
return array_key_exists($offset, $this->messages);
}
public function offsetGet($offset) {
return $this->messages[$offset];
}
public function offsetSet($offset, $value) {
$this->messages[$offset] = $value;
}
public function offsetUnset($offset) {
unset($this->messages[$offset]);
}
public function getIterator() {
return new ArrayIterator($this->messages);
}
}
$messages = new Messages();
$messages[0] = 'abc';
echo $messages[0]; // 'abc'
foreach($messages as $message) { echo $message; } // 'abc'