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"
}
}
大規模なケースステートメントなしで取得できますか?
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;
}
}
これには を使用できます[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());
PHP:
========================================
C#
あなたの答えはJon Skeetによってここにあります
または enume を使用します (enume 名を文字列に変換するのは簡単です:)
public enum Ram{a,b,c}
Ram MyEnume = Ram.a;
MyEnume.ToString()