Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

オブジェクトを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さんのブクマコメントを参考にサンプルを修正しました。ありがとうございました:-)