Do You PHP はてな このページをアンテナに追加 RSSフィード Twitter

2007-11-16

[]オブジェクトをarrayにキャストする

し、知らんかった。。。(2回目)

あ、これ逆((array)$obj)もできますよ。当たり前と言えば当たり前ですが。

配列をobjectにキャストする - Do You PHP はてな

ということで、前のエントリのサンプルを修正して実行。。。

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

studio-mstudio-m 2007/11/16 13:18 privateは展開して欲しくないのと、オブジェクトが持ってるオブジェクトも再帰的に配列にしたくて、toArray()を実装した俺が来ましたよ

shimookashimooka 2007/11/16 18:43 studio-mさん:アツイ!

hiro_yhiro_y 2007/11/17 00:11 いや、PHPのオブジェクトって要するにハッシュでしょ、と思っているので。<当然

shimookashimooka 2007/11/17 17:35 hiro_yさん:アタリw

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/shimooka/20071116/1195176801
リンク元