2010-11-28 4 views
8

다음은 작동하지 않는 코드입니다.PHP에서 클래스 속성에 클래스 상수를 사용하는 방법은 무엇입니까?

class MyClass 
{ 
    const myconst = 'somevalue'; 

    private $myvar = array(0 => 'do something with '.self::myconst); 
} 

런타임에 클래스 상수를 "컴파일 할 때"사용할 수없는 것 같습니다. 아무도 해결 방법을 알고 있습니까? (정의가 작동하지 않습니다)

감사

+0

C 매크로와 같은 것을 찾으려면 PHP가 그런 식으로 작동하지 않습니다. 게다가, "컴파일 시간"이 없습니다. PHP는 인터프리터입니다. – stillstanding

+0

설명서를 작성한 사람들은 "컴파일 시간"이 있다는 인상을 받고있는 것 같습니다. http://www.php.net/manual/en/language.oop5.properties.php –

+0

PHP 내부가 텍스트 코드를 바이트 코드로 변환하기 때문에 "컴파일 시간"(일종의)이 있습니다. http://sebastian-bergmann.de/archives/868-PHP-Compiler-Internals.html – Antoine

답변

10

문제를 (작동하지 않습니다 정의하는) 당신이 상수를 사용하고 있는지,하지만 당신은 식을 사용하는 것이 아니다.

클래스 멤버 변수를 "속성"이라고합니다. (...) public, protected 또는 private 키워드 중 하나를 사용하여 정의되고 일반 변수 선언이 뒤 따른다. 이 선언에는 초기화 ( )가 포함될 수 있지만이 초기화는 상수 값이어야합니다. 즉, 컴파일시 평가가 가능해야하며 평가를 위해 런타임 정보에 의존해서는 안됩니다.

이 간단한 선언, 예를 들어, 컴파일되지 않습니다 (구문 분석 오류) :

class MyClass{ 
    private $myvar = 3+2; 
} 

그러나 우리는 오히려 것 그 상수 연결된 문자열보다 간단한 상수를 사용하는 클래스 선언을 변경하는 경우 예상대로 작동합니다. 작업 주위 생성자에 속성을 초기화 할 수 있기

class MyClass{ 
    const myconst = 'somevalue'; 
    public $myvar = array(0 => self::myconst); 
} 

$obj = new MyClass(); 
echo $obj->myvar[0]; 

:
알린, 나는이 당신을 도움이되기를 바랍니다

class MyClass{ 
    const myconst = 'somevalue'; 
    public $myvar; 

    public function __construct(){ 
     $this->myvar = array(0 => 'do something with '.self::myconst); 
    } 
} 
$obj = new MyClass(); 
echo $obj->myvar[0]; 

+0

네, 알았습니다 ... 처음에 "const"배열을 만들려고했지만 PHP는 그것을 허용하지 않습니다. 그리고 그것은 기본 "정의"(실제 PHP/C++의 #define)가 PHP에 존재하지 않는 것 같습니다. 그래서 누구나 해결 방법이 있습니까? – Antoine

+0

@Antoine 최신 편집을보십시오. 이것이 내가 생각할 수있는 전부이며 생성자에서 초기화하는 것이 허용 가능한 메서드라고 말할 수 있습니다. –

+0

고마워, 그건 내 문제를 해결하는 좋은 방법이야! – Antoine

관련 문제