2009-12-02 6 views
2

환경 고유의 상수 클래스를 포함하고있는 프로젝트의 루트 디렉토리에 설정 파일이 있습니다. 내가 겪고있는 문제는 현재 디렉토리를 ROOT var로 설정하는 방법입니다. 의 효과에 뭔가 : 그것은 상수 표현으로PHP는 현재 디렉토리를 클래스 상수로 설정합니다.

Class Config { 
    const ROOT = dirname(__FILE__); 
} 

이 불가능합니다. 이것은 작동하는 것 같다

Class Config { 
    const ROOT = '/old/path'; 
    public function __construct(){ $this->ROOT = '/new/path'; echo $this->ROOT; } 
} 
$config = new Config; 

, 그러나 이것은 내 모든 클래스 사이 $의 설정 주위에 통과 필요 : 나는 또한 같은 인스턴스 당 거래에 변경 시도했습니다. 누구든지 이것에 대한 해킹을 발견 했습니까?

(아직 php5.3이 아니기 때문에 __DIR__이 작동하지 않습니다.)

Config::$ROOT 

답변

4

만들기 :이 같은

Class Config { 
    public static $ROOT = ''; // Can't call dirname yet 
} 
Config::$ROOT = dirname(__FILE__); // Now we can set it 

을 그리고 당신은 (포함 된 설정 파일을 가정)를 어디서나 호출 할 수 있습니다 :

+1

완전히 다른 솔루션을 사용했지만 나도 좋아합니다. –

1

는 대신이 같은 일정의 static 속성을 사용할 수 있습니다 먼저 호출 초기화 정적 기능 :

class Conf { 

static protected $_root= null; 

static public function root() { 
    if (is_null(self::$_root)) self::$_root= dirname(__FILE__); 
    return self::$_root; 
} 

} 

이 Y 허용 ou는 클래스 내에서 루트를 설정하고 루트의 값을 덮어 쓰지 않도록 보호합니다.

0

다른 프로젝트에서 다른 해결책을 찾았 기 때문에이 문제를 파헤칩니다. 프로젝트에서 이미 상수를 사용 했으므로 모든 호출을 Config::ROOT 상수로 변경할 수 없습니다.

솔루션

이 하나 :

<?php 
// classes/Config.php 
eval('class Config { const ROOT = "'.dirname(__FILE__).'"; }'); 

그것은 매우 추한하지만이 경우 일했다.

관련 문제