2012-07-28 4 views
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" 
    } 
} 

거대한 사례 설명없이 얻을 수 있습니까?상수의 이름은 어떻게 얻을 수 있습니까?

+0

당신은 정교해야 할 것입니다 사용에 의해 여기; 현재는별로 의미가 없습니다. 어떻게 그 이름을 얻을 계획 이니? '$ id'의 값으로부터? 그리고 * 왜 * 당신은 상수의 이름이 필요합니까? 그 이름으로 무엇을 할거니? – knittl

+0

함수 시그니처는 상수의 값을 전달해야 함을 의미하지만 함수 본문은 상수의 * name *이 전달 될 때만 올바르게 작동합니다. 인자없이 함수를 호출하면, 기본적으로 "is self :: 1 defined?"라는 질문을 받는다. 이것은 분명히 원하는 것이 아니다. – DCoder

+0

네, 그건 상수를 얻으려는 나쁜 시도였습니다. (어쨌든 나는 여전히 이름을 얻고 싶습니다 .. (그리고 그 정의가되어 있는지 확인하십시오) – Alex

답변

3

ReflectionClass::getConstants을 살펴보십시오. 같은

뭔가 (이 BTW, 꽤 추한 및 비효율적가) :

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; 
    } 
} 
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()); 
1

PHP : 클래스 이름에서

  1. 사용 ReflectionClass
  2. 사용 getConstants() 메소드
  3. 지금은 getConstants을() 결과 scaning 및 대상 이름
  4. 을 얻기를 위해 결과 값을 확인할 수 있습니다

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

C#

당신의 대답은 존 소총

Determine the name of a constant based on the value

또는 enume은 (문자열로 enume 이름을 변환하는 것은 쉬운 :

public enum Ram{a,b,c} 
Ram MyEnume = Ram.a; 
MyEnume.ToString() 
+0

당신이 제공 한 링크는 PHP 언어가 아닌 C# 언어에 관한 질문입니다. 그리고 당신의 대답은 유효한 PHP 코드와 같지 않습니다. – Jocelyn

+0

예, PHP 메소드를 추가했습니다. – RAM

관련 문제