2012-07-09 2 views
1

PHP에서 OOP을 배우고 있으며 변수의 값을 상수로 지정하고 싶습니다. 어떻게해야합니까?PHP - 변수에서 상수로의 값

이 내 코드입니다 (! 작동하지) :

class Dir { 

const ROOT = $_SERVER['DOCUMENT_ROOT']."project/"; 

function __construct() { 

} 
} 

어떤 해결책이 있나요, 변수에서 값을하는 방법, 문자열을 추가하고 일정에 넣어 - OOP에?

The value must be a constant expression, not (for example) a variable, a property, a result of a mathematical operation, or a function call. 
+2

1과 같이 사용할 수 있습니다 : 당신이지고 어떤 오류. 2 : 무엇을 시도 했습니까? 3 : 클래스 레벨에서 상수를 정의하는 이유는 무엇입니까? 분명 글로벌 수준에 속하는 상수입니다. 3 : 'ROOT'는 위험한 상수이기 때문에 'PROJECT_ROOT'로 변경하십시오. 당신이 나에게 묻는다면 환경 변수에 가깝다.) –

+0

참고로 클래스에서 전역 상수를 사용하는 것은 권장하지 않는다. 클래스를 재사용하고 싶지만 전역 범위에서 상수를 필요로하지 않으면 어떻게됩니까? 이러한 종류의 데이터 대신 Getters 및 Setters를 사용하십시오. –

답변

6

.

나는 $_SERVER['DOCUMENT_ROOT']에 의존하지 말고, ROOT 자신을 정의 할 수 있습니다.

는 예를 들어, 문서 루트에 config.php, 당신은

define('ROOT', __DIR__.'/'); // php version >= 5.3 
define('ROOT', dirname(__FILE__).'/'); // php version < 5.3 

다음 대신 ROOT를 사용 할 수 있습니다.

+2

+1 - 클래스 상수를 사용하는 대신 OP는 정적 속성을 사용할 수 있습니다 :'static $ root = $ _SERVER [ 'DOCUMENT_ROOT']. "project /"' – prodigitalson

+0

예, 옵션 일 수도 있지만 여기 http : //www.php.net/manual/en/language.oop5.static.php "정적으로 선언 된 속성은 인스턴스화 된 클래스 객체로 액세스 할 수 없습니다."어쩌면 설정 파일 (클래스 일 수 있음) 이 값은 정의되어 있습니다 .. 그것은 단지 문자열로 정의 될 수 있고 $ _SERVER 슈퍼 전역에 의존하지 않도록 각 서버에서 변경 될 수 있습니다 .. – mishu

+1

jsut은'$ instance-> 대신'TheClassName :: $ root'를 반드시 수행해야만합니다. 그러나 인스턴스에서 그 값을 액세스하고 변경할 수 있습니다. 정적 표기법을 사용해야합니다. – prodigitalson

0

__construct()에 설정하지 않으시겠습니까? 기술적으로 그것이 바로 그 때문입니다.

class Dir { 

    public function __construct() { 
     self::ROOT = $_SERVER['DOCUMENT_ROOT']."project/"; 
    } 
} 
0

OOP를 사용하고 싶기 때문에이 솔루션을 제안합니다. 모든 클래스가 클래스 내부에 있어야합니다. CONST 또는 정적 var에 직접 사용이 불가능 그래서 때문에 정적 함수를 사용합니다 :

class Dir 
{ 
    public static function getRoot() 
    { 
     return $_SERVER['DOCUMENT_ROOT'] . 'project/'; 
    } 
} 

을 당신은

Dir::getRoot();