2014-04-27 2 views
2

내가 내 모델 중 하나에이 코드 조각을했다 Laravel 4. 사용하는 사이트 개발되었다PHP - '('예상 ')'구문 오류, 예기치 못한

class MyModel extends Eloquent { 
    protected $var = array(
     "label" => Lang::get("messages.label"), 
     "code" => "myCode", 
    ); 
    ... 
} 

을하지만이 구문을 주었다

class MyModel extends Eloquent { 
    protected $var; 

    public function __construct() { 
     $this->var = array(
      "label" => Lang::get("messages.label"), 
      "code" => "myCode", 
     ); 
    } 
} 

그리고 오류 우리 :이에 내 코드를 변경 다음

syntax error, unexpected '(', expecting ')' 

: 나는 Lang::get을 사용하는 라인에 오류 없어 졌어! 나는 그 오류가 매우 혼란스럽고 도움이되지 않는다고 생각한다. PHP가이 오류 메시지를 표시하는 이유는 무엇입니까?

+1

가능한 [메소드 외부에서 dirname()을 사용하여이 공용 클래스 변수를 초기화하는 중 오류가 발생했습니다.] (http://stackoverflow.com/questions/6155965/getting-an-error-trying-to-initialize- this-public-class-variable-using-dirname) –

답변

3

허용되지 않는 클래스 속성을 정의 할 때 Lang::get()을 사용했기 때문입니다. 정적 메소드 같은 것을 호출하는 것은 runtime (코드가 실행될 때)에서만 수행 될 수 있습니다.

클래스를 정의 할 때 클래스의 속성은 변수가 아닌 값 (예 : 정수, 문자열 또는 변수 자체가 아닌 변수 만 포함하는 배열) 일 수 있습니다.

런타임 코드를 생성자에 넣어야합니다.

+0

PHP에서이 오류 메시지가 가장 이상하게 들릴 수도 있습니다. 이봐, 난 벽에 머리를 두드렸다. – morksinaanab

+0

@morksinaanab 예, PHP를 사용하여 오류를 이해하는 방법을 알고 있어야합니다. 새로운 버전의 PHP에서는 오류 메시지가 다소 개선되었습니다. –

1

문제는 Lang :: get을 호출하기 때문에 클래스 속성을 초기화 할 때 함수이고, 클래스 속성의 기본값은 상수 값 일 수 있습니다.

대신 이러한 속성을 생성자에서 초기화해야합니다.

관련 문제