2014-07-16 2 views
0

에서 상수 이름은 내가 문자열의 색깔 HTML 표현을 리턴이PHP : 변수

class Painter { 
    const COLOR_PHYSIC = 'brown'; 
    const COLOR_PSYCHIC = 'purple'; 
    const COLOR_ATTACKER = 'dodgerblue'; 
    const COLOR_DEFENDER = 'darkorange'; 

    public function __call($name, $arguments) { 
     if(defined('self::'.$name)) $name = self::$$name; 

     return '<span class="'.$name.'">'.$arguments[0].'</span>'; 
    } 
} 

처럼 보이는 PHP 클래스가 있습니다. 사용 예제는 :

$painter->red('Text'); // <span class="red">Text</span> 

나는 또한 필요에 내가 끼 었어 곳이다, 존재하는 경우, 향후 변경 될 수있는 몇 가지 사전 설정 색상을 가지고 싶습니다. 내가이 줄을 실행하면

$painter->COLOR_DEFENDER('Text'); 

가 나는 오류 메시지가 선언되지 않은 정적 속성에

액세스를 얻을 : 화가 : $ COLOR_DEFENDER 내가 코드를 수정하는 방법

그래서 $name도 상수로 해석 될 수 있습니까?

또한 사이드 노트에서 프리셋 색상을 상수 대신 배열에 저장하는 방법을 변경하면 메모리를 적게 사용하는지 확인하는 것이 궁금합니다. 후류 PHP에 익숙한 사람이이 질문에 대답 할 수 있다면 정말 행복 할 것입니다. 미리 감사드립니다!

+0

상수 대신 개인 멤버를 선언하면 어떤 문제가 발생합니까? – mudasobwa

+0

@ mudasobwa 실제로 상수를 사용하기로 결정한 이유를 실제로 알지 못하지만 어쨌든 여전히 답을 알고 싶습니다. 유효한 질문입니다. –

+0

'self :: $ name'에 2 개의 $ 기호를 사용하고 있습니다. 1을 제거하고 다시 시도 할 수 있습니까? –

답변

3
if (defined('self::' . $name)) { 
    $name = constant('self::' . $name); 
} 

동적으로 상수를 검색하려면 constant function을 사용해야합니다.

+0

+1 - 클래스 내에서 작동하는 것을 알지 못했지만'defined() '와 결합했습니다. – ash

+0

@Ash 그렇지 않은 경우 :'constant (__ CLASS__.':: '. $ name)'... ;) – deceze

+1

유효 포인트 - 상수는 공개적으로 액세스 할 수 있으며 작동하지 않는 이유는 없습니다. – ash