1
const

  STUFF      = 1,
  MORE_STUFF = 3,
  ...
  LAST_STUFF = 45;  


function($id = self::STUFF){
  if(defined('self::'.$id)){
    // here how do I get the name of the constant?
    // eg "STUFF"
  }
}

大規模なケースステートメントなしで取得できますか?

4

3 に答える 3

3

ReflectionClass::getConstantsを見てください。

次のようなものです(かなり醜くて非効率的です、ところで):

class Foo {
    const

      STUFF      = 1,
      MORE_STUFF = 3,
      ...
      LAST_STUFF = 45;     

    function get_name($id = self::STUFF)
    {
         $rc = new ReflectionClass ('Foo');
         $consts = $oClass->getConstants ();

         foreach ($consts as $name => $value) {
             if ($value === $id) {
                 return $name;
             }
         }
         return NULL;
    }
}
于 2012-07-28T09:50:43.190 に答える
2

これには を使用できます[Reflection][1]

以下のクラスがあると仮定します。

class Profile {
    const LABEL_FIRST_NAME = "First Name";
    const LABEL_LAST_NAME = "Last Name";
    const LABEL_COMPANY_NAME = "Company";
}


$refl = new ReflectionClass('Profile');
print_r($refl->getConstants());
于 2012-07-28T09:50:57.210 に答える
1

PHP:

  1. クラス名から ReflectionClass を使用します
  2. getConstants() メソッドを使用する
  3. getConstants() の結果をスキャンし、結果の値を検証してターゲット名を取得できるようになりました

========================================

C#

あなたの答えはJon Skeetによってここにあります

値に基づいて定数の名前を決定する

または enume を使用します (enume 名を文字列に変換するのは簡単です:)

public enum Ram{a,b,c}
Ram MyEnume = Ram.a;
MyEnume.ToString()
于 2012-07-28T09:59:46.243 に答える