ある暗い嵐の夜だった*1。
そのサンプルソースには、明らかな欠落がある…ように思われた。
<?php $obj->name = "data1"; $obj->value = "data_value"; 以下続く
わかりきった結果を予想しつつ、それでも一応コンソールで確認を取る。
エラー表示をコピペして相手に送りつけるのは、それは神聖ともいえる義務であるからだ。
orz
orz orz
orz orz orz
orz orz orz orz
orz orz orz orz orz
orz orz orz orz orz orz
orz orz orz orz orz orz orz
通ったよをい。
以下、var_dumpの結果。
object(stdClass)#1 (2) { ["name"]=> string(5) "data1" ["value"]=> string(10) "data_value" }
…ありえねぇ。
まぁいいよわかったよ宣言なくて使った俺が悪かったよ。
気を取り直して、以下。
<?php class hoge { private $bar_; private $foo_; private $foobar_; } $obj = new hoge; $obj->data = "data"; var_dump($obj);
結果。
object(hoge)#1 (4) { ["bar_:private"]=> NULL ["foo_:private"]=> NULL ["foobar_:private"]=> NULL ["data"]=> string(4) "data" }
…マヂデスカ?
で。ちょいと遊んでみる。厳密には「酔いどれ源譜」のおにぃちゃんが遊んだコード。
<?php class hoge { public function __set($name, $value) { unset($this->$name); } private $bar_; private $foo_; private $foobar_; } $obj = new hoge; $obj->foo_ = "data"; var_dump($obj);
結果。
object(hoge)#1 (2) { ["bar_:private"]=> NULL ["foobar_:private"]=> NULL }
おわかりでしょうか?
private変数が「unsetされて消えてます」。
すげぇよあんた…
んで。大変に困ったことに。この方法を暗黙的とはいえ推奨してやがるPageさんがあります。
http://phpspot.net/php/pgPHP%95W%8F%80%83N%83%89%83X%82%CCstdClass%82%C9%82%C2%82%A2%82%C4.html
…頼むから便利の方向性を間違えないでくれ orz
なんていうんだろ?
こーやって「しつけの出来ていないレゴブロッカー*2ってかジェンガー*3が量産されていくんだなぁ」と。
勘弁してほしいモノです。