揮発性のメモ2

http://d.hatena.ne.jp/iww/

静的メンバ変数に、変数名の文字列でアクセスする

動的メンバ変数に 変数名の文字列でアクセスするには、$chinko->$name とかみたいに
適当に矢印の先に変数を指定すればその変数に入ってる文字列を変数名と見なしてくれる。

<?
class Chinko {
    public $hoge = "あいうえお";
}

$chinko = new Chinko();
print $chinko->hoge ."\n"; // 普通に hogeにアクセスできる

$name = "hoge";
print $chinko->$name ."\n"; // $nameに入った文字列 hoge でアクセスできる

静的メンバ変数に 変数名の文字列でアクセスするには、Unko::$name みたいに書くと
nameという静的変数に普通にアクセスしてしまう。
適当にもういっこ $ をつけて Unko::$$name とすると良い
(メンバ変数じゃなくてても普通の変数でも使える可変変数という裏技)

<?
class Unko {
    static public $hoge = "あいうえお";
}

print Unko::$hoge ."\n"; // 普通に hogeにアクセスできる

$name = "hoge";
print Unko::$$name ."\n"; // $nameに入った文字列 hoge でアクセスできる




静的メンバ変数をforeachとかで処理したいときは 、ReflectionClass を使って連想配列として取り出す

<?
class Unko {
    static public $hoge = "あいうえお";
}

$class = new ReflectionClass(Unko);
$list = $class->getStaticProperties();
print_r($list);
Array
(
    [hoge] => あいうえお
)