1

私はいくつかの定数が定義されている単純な列挙型クラスを持っていますが、いくつかの静的メソッドが列挙型に反映されるようにしたいと考えています。

この列挙にどのキーが含まれているかなどを尋ねることができますか?

これを実装しましたが、宣伝どおりに機能します。これまでのところ素晴らしいですが、これらのメソッドの実装が存在し、すべての Enum がこれを拡張して恩恵を受けることができる基本 Enum クラスが本当に必要です。

残念ながら、私がそうすると、CLASSマジック変数は基本クラスを返し、リフレクションを台無しにします。私が欲しいのは、子クラスを返す関数ですが、機能するアプローチはどれでも問題ありません。

クラス定義は次のとおりです。

final class LG_NutritionalValues 
{
   // ENUMERATION 
   const Calories = 1;
   const Fat = 2;
   const Carbohydrates = 3;
   const Etc = 999;

   public static function is_valid_key ( $value ) {
    $reflect = new ReflectionClass ( __CLASS__ );
    return in_array ( $value , array_keys( $reflect->getConstants() ) );
   }
   public static function list_keys() {
    $reflect = new ReflectionClass ( __CLASS__ );
    return array_keys( $reflect->getConstants() );
   }

} // END enum class 
4

1 に答える 1

0

PHP 5.3以降、get_called_class()を使用できます

于 2012-08-24T14:53:32.460 に答える