したくない場合
$class = get_class($instance);
$var = $class::$staticvar;
2 行が長すぎるため、他のオプションを使用できます。
1.ゲッターを書く
<?php
class C {
static $staticvar = "STATIC";
function getTheStaticVar() {
return self::$staticvar;
}
}
$instance = new C();
echo $instance->getTheStaticVar();
シンプルでエレガントですが、アクセスする静的変数ごとにゲッターを作成する必要があります。
2.ユニバーサル静的ゲッターを書く
<?php
class C {
static $staticvar = "STATIC";
function getStatic($staticname) {
return self::$$staticname;
}
}
$instance = new C();
echo $instance->getStatic('staticvar');
これにより、静的にアクセスできるようになりますが、まだ少し長くなります。
3. 魔法のメソッドを書く
class C {
static $staticvar = "STATIC";
function __get($staticname) {
return self::$$staticname;
}
}
$instance = new C();
echo $instance->staticvar;
これにより、あたかもオブジェクトのローカル変数であるかのように、任意の静的変数へのインスタンス化されたアクセスが可能になりますが、これは忌まわしい行為と見なされる可能性があります。