2010-12-18 6 views
1

클래스에 변수를 만들 때 왜 defines을 사용할 수 없습니까? 이 일을 끝내려면 어떻게해야합니까? 이처럼OOP에서 변수에 정의를 사용할 수 없습니다.

합니다 (정의하는 테이블 접두사 (dB)이다) :

나에게 다음과 같은 오류 제공
class foo { 
    public $bar = FOO."bar"; 
} 

:

Parse error: syntax error, unexpected '.', expecting ',' or ';'

+4

는 그것은라고 A [상수 (http://php.net/manual/en/language.constants.php) '()'를 만드는 상수 함수 정의한다. – BoltClock

답변

7

에만 상수 식으로 속성을 선언 할 수 있습니다. 여기에서는 연결 연산자가 올바르지 않으므로 (따라서 구문 분석 오류) FOO 상수가 아닙니다.

public $bar = FOO."bar"; 

한 가지 방법은 생성자에서 초기화하는 것입니다. 문자열과 연결하여 상수를 계속 사용할 수 있습니다.

class foo { 
    public $bar; 

    public function __construct() { 
     $this->bar = FOO."bar"; 
    } 
} 
+0

작동 .. 감사합니다! – Marwelln

0

defines은 사용할 수 없습니다. 변수를 초기화 할 때는 연산자를 사용할 수 없습니다.

1

당신은 값을 초기화하는 생성자를 사용할 수 있습니다 : 위에서 언급 한 바와 같이, 당신은 값이 동적 할 필요가있는 경우, 연산자를 사용하여 클래스 변수를 정의 할 수 없습니다

<?php 
define("FOO", "test"); 

class foo { 
    public $bar; 

    function __construct() 
    { 
     $this->bar = FOO . "bar"; 
    } 
} 

var_dump(new foo()); 
0

, 다음 과제는 함수에서 발생해야합니다.

상수를 사용할 때 전역 범위에서 상수를 정의하는 대신 클래스 상수를 사용하는 것이 유용 할 수 있습니다. 키워드는 const으로 정의되고 self:: 연산자를 사용하여 액세스 할 수 있습니다. 당신이 다른 상황에서 클래스에서 상수를 사용할 수 있도록, foo::BAR하지만 define 정의 된 상수 전역에 자동으로되지 않습니다

class foo 
{ 
    const BAR = 'test'; 

    public $baz; 

    public function __construct() 
    { 
     $this->baz = self::BAR . 'bat'; 
    } 

} 

클래스 상수는 정적 인스턴스 외부에서 액세스 할 수 있습니다.

$some_var = foo::BAR; 
echo $some_var; 
// output: test 
관련 문제