PHPでクラス定数の一覧は取得できないのかな?

get_defined_constants()やget_class_vars()などでは取得できないので、、無理っぽい。⇒追記参照

class Test
{
 const HOGE = 1;
 public $hoge = 2;
}
print_r(get_class_vars('Test'));

一覧を取得したいがためにクラス変数でやろうとすると、上書きを阻止する手段がなくなってしまう。

PHP: Class Constants – Manual
ここのコメントにあるコードがちょっと近かったので参考にしてあれこれいじってみた。

class aClassConstant
{
    final function __set($member, $value)
    {
        throw new Exception("You cannot set a constant.");
    }
    final function __get($member)
    {
        return $this->$member;
    }
}
class Test extends aClassConstant
{
    const HOGE = 1;
    static public $test = 1;
// static protected $test = 1;
    public function __construct()
    {
//        $this->test = 2;
    }
}
echo Test::$test . "\n";
Test::$test = 3;
echo Test::$test . "\n";
$a = new Test;
$a->test = 2;
echo $a->test . "\n";

ここもちょっと参考に。
PHPの定数をどうするか – cloned.log

2007年1月5日追記
Do You PHPのshimooka氏にトラックバックで教えてもらいました!ありがとうございます。
PHP: リフレクション – Manual
このクラスをnewしてgetConstantsなるメソッドを使うと配列で取得できました。おぉ。全然知らなかった。

This entry was posted in いじる. Bookmark the permalink. Both comments and trackbacks are currently closed.

One Trackback

  • By Do You PHP はてな on 2008/01/05 at 12:01 am

    [PHP]PHPでクラス定数の一覧を取得する…

    PHP5限定ですが、Reflectionでどうでしょうか? get_defined_constants()やget_class_vars()などでは取得できないので、、無理っぽい。 zuzara : PHPでクラス定数の一覧は取得できないのかな? 以下、サン…

Page optimized by WP Minify WordPress Plugin