特集・コラム

メニュー

PHPer上級者になるために知っておきたいこと

vol.16 ‐ PHP 『Standard PHP Library(SPL) ArrayObjectクラス編』

投稿日時:2013/07/24 09:07

カテゴリ: PHPer上級者になるために知っておきたいこと

前回は「ArrayIteratorつながりとしてのArrayObjectクラス」を紹介していきました。
ただ、ArrayObjectクラスはそれ以外にも色々なメソッドをもっているので、少し「ArrayObjectクラス」自体を、今回は紹介していきましょう。

まず、ArrayObjectクラスは「配列と同じように」使えます。

<?php
$awk = [0,1,2,3,4];
$obj = new ArrayObject($awk);
var_dump($obj);
var_dump($obj[2]);

コンストラクタに配列を渡すと、同じように動きます。
これだけだと「配列と何が違うんだろう?」となるのですが。配列は代入演算子=によって「値がcopyされる」のに対して、ArrayObjectクラスはクラスなので、代入演算子=で「参照」がcopyされます。
以下のコードを動かしてみると、状況がわかるでしょう。

<?php
// 値(配列/インスタンス)を作成
$awk = [0,1,2,3,4];
$obj = new ArrayObject($awk);
// 値を代入演算子でcopy
$awk2 = $awk;
$obj2 = $obj;
// 片方だけに値を追加してみる
$awk2[] = 5;
$obj2[] = 5;
// 結果を見る
debug_zval_dump($awk);
debug_zval_dump($awk2);
debug_zval_dump($obj);
debug_zval_dump($obj2);

また、ArrayObjectクラスはコンストラクタの引数として「インスタンス」を与える事もできます。
以下のコードを動かして、どんな事が起きるか試してみましょう。

<?php

class hoge {
  public function foo() {}

public $pub_a = 10;
public $pub_b = 20;
protected $pro_a = 100;
protected $pro_b = 200;
private $pri_a = 1000;
private $pri_b = 2000;
};

$o = new hoge();
$obj = new ArrayObject( $o );
var_dump($obj);
var_dump($obj['pub_a']);
var_dump($obj['pro_a']);
var_dump($obj['pri_a']);

$o->pub_b = 400;
var_dump($obj['pub_b']);

$obj->offsetSet('pub_a', 11);
var_dump($o);

少しArrayObjectクラスの寄り道をしてみました。
次回はまたIteratorつながりに話を戻して、配列以外のIteratorの実装の例としてDirectoryIteratorクラスを見てみましょう。

バックナンバーはこちら

IT系のお仕事特集

お仕事のご紹介には、まずヒューマンリソシアへの登録が必要です。
ヒューマンリソシア人材派遣サイトの便利な機能 ・お気に入りの派遣求人のブックマーク ・登録会への予約 ・有給休暇の管理 ・WEB給与明細の確認 ・お気に入りの情報をメール受信
登録会の入力手続きをあらかじめおこなえます。

ヒューマンリソシア派遣サービスに 登録する 無料

ページトップへ戻る
ヒューマンリソシア派遣サービスに 登録する 無料
ページトップへ戻る