PHP クラス定数取得
クラス定数ってstatic変数みたいに、インスタンス化しなくてもクラスから直でとれるんだ…。 どちらも::で呼び出すの一緒だなと思ってはいたけど。 定数はインスタンス化しないととれないものと思い込んでいた。
余談:静的メンバって呼び方基本とするなら、変数は静的変数、と呼ぶのが自然だけど、 static変数のがわかりやすいよね…静的メンバはstaticメンバっていったほうが直感的かもな
知らずに色々検証してしまった。
以下いらなくなっちゃったけど記録として…
<?php class TestClass { const A = 1; const B = 2; const C = 3; // * 定数の出力 // ひとつずつ public static function getConst($propName) { return constant("self::" . $propName); } // 配列取得 private static $constants; public static function getConstants() { if (!static::$constants) { $reflectionClass = new ReflectionClass(__CLASS__); static::$constants = $reflectionClass->getConstants(); } return static::$constants; } } var_dump(TestClass::getConstants()); var_dump(TestClass::getConst("A")); // まあこれでいけたんだけど… var_dump(TestClass::A);
おまけ
いまとなっては没だけど、最初はこういうのも考えていた。 この取得方法の場合、定数名が間違っていても返される値がNULLになるだけで何も起きないので、エラーを送出するように。
<?php function getConst($propName) { $const = TestClass::getConstants(); if (!$const[$propName]) throw new ErrorException('TestClassに"' . $propName . '"が存在しません。'); return $const[$propName]; }