• 追加された行はこの色です。
  • 削除された行はこの色です。
* ArrayObjectクラス [#y5406fbe]
* ArrayObjectクラスとArrayIteratorクラス [#y5406fbe]

 <?php
 class MyList extends ArrayObject {
** ArrayObjectクラスを継承して配列クラスを作る [#o5971729]

 class MyArrObj extends ArrayObject {
     function __construct($arr) {
         parent::__construct($arr);
     }
     function setFoo($val) {
         $this->foo = $val;
     function double() {
         $arr = $this->getArrayCopy();
         return new MyArrObj(array_merge($arr, $arr));
     }
     function getFoo() {
         return $this->foo;
     }
 }
       
 $list = new MyList(array(1,2,3));
 $it = $list->getIterator();
 $list->setFoo(1);

** 配列クラスをイテレータを使って走査する 1 [#xb323978]
 $arrObj = new MyArrObj(array(1,2,3));
 $it = $arrObj->getIterator();
 while ($it->valid()) {
     $k = $it->key();
     $v = $it->current();
     print "$k : $v\n";
     printf("%s : %s\n", $k, $v);
     $it->next();
 }
 print $list->getFoo() . "\n";
       
 $list2 = (array) $list; // $list2 = arraY(1,2,3)
** 配列クラスをイテレータを使って走査する 2 [#v34cbe5a]

 foreach ($it as $k => $v) {
     printf("%s : %s\n", $k, $v);
 }

** 配列クラスにメソッドを使って値を追加する [#g9c9de37]
 $arrObj->append('4');

** 配列クラスを配列変数的に操作する [#x20ccb2b]
 foreach ($arrObj as $k => $v) {
     print "$k => $v\n";
 }

** 配列クラスに配列キーワードを使って値を追加する [#w01e144b]
 $arrObj[] = 5;

** 配列クラスに定義されたメソッドを使う [#gf3aef7d]
 $arr2 = $arrObj->double();

** ArrayIteratorクラスを継承して配列イテレータークラスを作る [#h61d1623]
 class MyArrIt extends ArrayIterator {
     function isEven() {
         $k = $this->key();
         return $k % 2 === 0 ? true : false;
     }
 }

** 配列クラスのイテレーターを変更する [#qc03adb7]
 $arrObj->setIteratorClass('MyArrIt');

** 配列イテレータークラスに定義されたメソッドを使う [#a55a981e]
 $it = $arrObj->getIterator();
 foreach ($it as $k => $v) {
     $x = $it->isEven() ? 'O' : 'X';
     printf("%s %s : %s\n", $x, $k, $v);
 }

** 参考 [#yfe19d40]
- http://php.net/manual/ja/class.arrayobject.php
- http://jp.php.net/manual/ja/class.arrayiterator.php



トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS