オブジェクトをarrayにキャストする
し、知らんかった。。。(2回目)
ということで、前のエントリのサンプルを修正して実行。。。
あ、これ逆((array)$obj)もできますよ。当たり前と言えば当たり前ですが。
$ cat cast.php <?php $arr = array('foo' => 1, 'bar' => 'hogehoge', 'baz'); $obj = (object)$arr; var_dump($arr); var_dump((object)$arr); var_dump((array)(object)$arr); class ClassA { private $priv; protected $prot; public $pub; public function __construct($priv, $prot, $pub) { $this->priv = $priv; $this->prot = $prot; $this->pub = $pub; } } class ClassB extends ClassA { private $priv; protected $prot; public $pub; public function __construct($priv, $prot, $pub) { parent::__construct($priv, $prot, $pub); $this->priv = $priv + 1; $this->prot = $prot . 'baz'; $this->pub = !$pub; } } $obj = new ClassA(1, 'foo', false); var_dump((array)$obj); $obj = new ClassB(2, 'bar', true); var_dump((array)$obj); $ php cast.php array(3) { ["foo"]=> int(1) ["bar"]=> string(8) "hogehoge" [0]=> string(3) "baz" } object(stdClass)#2 (3) { ["foo"]=> int(1) ["bar"]=> string(8) "hogehoge" [0]=> string(3) "baz" } array(3) { ["foo"]=> int(1) ["bar"]=> string(8) "hogehoge" [0]=> string(3) "baz" } array(3) { ["ClassApriv"]=> int(1) ["*prot"]=> string(3) "foo" ["pub"]=> bool(false) } array(4) { ["ClassBpriv"]=> int(3) ["*prot"]=> string(6) "barbaz" ["pub"]=> bool(false) ["ClassApriv"]=> int(2) } $
これって当たり前ですか?当たり前ですか。そうですか。
追記(2007/11/16 10:50)
id:candystreamさんのブクマコメントを参考にサンプルを修正しました。ありがとうございました:-)