2010-12-06 6 views
1

Iv'e는 클래스 구조 내의 변수에 동적 값을 설정할 수 없다는 것을 항상 알고 있었지만이 방법은 무엇입니까?클래스의 변수/상수로 동적 값 할당

내가이 인터페이스가 :

syntax error, unexpected '|', expecting ',' or ';' 

그러나 이것은을 그대로 : 선이 제 1 & 2 트리거 오류로 표시된이 코드 내에서

interface IUserPermissions 
{ 
    /* 
     * Public VIEW,CREATE,UPDATE,DELETE 
    */ 
    const PUBLIC_VIEW = 1; 
    const PUBLIC_CREATE = 2; 
    const PUBLIC_EDIT = 4; 
    const PUBLIC_DELETE = 8; 
    const PUBLIC_GLOBAL = 1 | 2 | 4 | 8;   #Section 1 

    /* 
     * Admin VIEW,CREATE,UPDATE,DELETE 
    */ 
    const ADMIN_VIEW = 16; 
    const ADMIN_CREATE = 32; 
    const ADMIN_EDIT = 64; 
    const ADMIN_DELETE = 128; 
    const ADMIN_GLOBAL = 16 | 32 | 64 | 128;  #Section 2 
} 

을,보다 구체적인 오류는 다음과 같습니다 인터페이스에는 메소드가 없으므로 코드 블록이 허용되지 않습니다.

누구든지 솔루션을 제공 할 수 있습니까?

답변

2

이 연산자는 클래스 멤버 선언에 사용할 수 없습니다. 그러나 수학을 직접 수행하고 결과를 할당 할 수 있습니다. 1 | 2 | 4 | 816 | 32 | 64 | 12815240로 평가하기 때문에, 각각 단지 수행 컴파일러는 상수 리터럴을 포함하는 수학 식을 인식하기 때문에 다른 언어

const PUBLIC_GLOBAL = 15; // 1 | 2 | 4 | 8 

const ADMIN_GLOBAL = 240; // 16 | 32 | 64 | 128 
+0

죄송합니다. 내 코드는 '11100110'으로 평가되는 XOR로 추정됩니다. – RobertPitt

+0

예. 나는 그것을 깨달았습니다. 어느 쪽이든, 직접 값을 계산하고 주석을 만드십시오. – webbiedave

+0

@RobertPitt - XOR이 아닌 OR을 의미하는 것으로 의심됩니다. 그러나 어느 쪽이든 대답은 똑같습니다 :'11110000' (240 dec). PHP의 XOR 연산자는'^'이고, OR 연산자는'|'입니다. – Lee

2

, 이것은 작동합니다, 하나의 상수 리터럴 값으로 "줄일"수 있습니다 ... 따라서 실제 코드가 존재하지 않는 문맥에서는 대부분의 "간단한"수학 표현식을 사용할 수 있습니다.

그러나 PHP에서는 컴파일러가 없습니다 (최소한 전통적 의미는 아닙니다). PHP가 해석됩니다. 따라서 우리가 다른 언어로 사용하던 많은 "컴파일 시간"기능은 PHP에 존재하지 않습니다.

이 경우 중 하나입니다. 당신이 (대신 인터페이스) 클래스로 상수를 이동하고 (대신 상수) 그들에게 정적 멤버 변수를 만들고 싶어하지 않는 한, 당신은 수학을 직접하고 붙어있어 :하지만

(16 & 32 & 64 & 128) == 0 

, 나는 실제로 당신을 의심 의미 :

(16 | 32 | 64 | 128) == 240 
+0

참으로 내 질문이 수정되었습니다. 답변 해 주셔서 감사합니다. 가장 논리적으로 보입니다. – RobertPitt