gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

ご内密で自動に…するなっ!!

ある暗い嵐の夜だった*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が量産されていくんだなぁ」と。
勘弁してほしいモノです。

*1:とある有名な犬が書く小説の典型的な出だしw

*2:用意されたレゴを積み上げるだけ

*3:積み上げるってより壊す人