2010-01-17 6 views

답변

3

클래스 선언에 표현식을 사용할 수 없습니다.

내가있는 경로를 통과하는 제안 :

public function __construct($path) 
{ 
    $this->debug_path = $path; 
} 

적 경로를 변경하려는 경우에 당신에게 더 많은 유연성을 제공, 당신은 당신이 전달 그냥 뭐, 일정을 변경할 필요가 없습니다

합니다.

다른 경로를 가진 개체를 여러 개 만들 수도 있습니다. 자동 로더 클래스 인 경우 여러 디렉토리를로드하려는 경우 유용합니다.

$autoloader = new Autoload(dirname(SYS_PATH)); 
$autoloader->register_loader(); 

class Autoload 
{ 
    public $include_path = ""; 

    public function __construct($include_path="") 
    { 
     // Set the Include Path 
     // TODO: Sanitize Include Path (Remove Trailing Slash) 
     if(!empty($include_path)) 
     { 
      $this->include_path = $include_path; 
     } 
     else 
     { 
      $this->include_path = get_include_path(); 
     } 

     // Check the directory exists. 
     if(!file_exists($this->include_path)) 
     { 
      throw new Exception("Bad Include Path Given"); 
     } 
    } 
    // .... more stuff .... 
} 
+1

그리고 의견은 다시 작성하지 않고 프로젝트에서 소스 코드를 제공했다는 의미입니다. 예! –

+0

좋은 물건, 고맙습니다. – JasonDavis

+0

get_include_path()는 OS 특정 경로 구분 기호로 구분 된 여러 경로를 반환 할 수 있습니다. 따라서 다중 경로가 정의되었지만 개별적으로 유효한 경로 인 경우 file_exists에 대한 호출이 실패합니다. –

2

당신은 필드 이니셜 라이저의 식을 (.)를 사용할 수 없습니다를 참조하십시오. See example one in PHP manual

+0

나는 디버깅 파일의 전체 경로와 함께 새로운 상수를 기본적으로 만들어야한다. – JasonDavis

+0

글쎄 .. 당신은 할 수 있습니다 .. 그냥 리터럴 문자열을 포함해야합니다. –

+0

및 @Jasondavis, 예. 하지만 여러분은 클래스의 초기화시에 경로를 전달할 수 있습니다. 이렇게하면 나중에 여러 경로 (여러 개체)를 사용하거나 나중에 경로를 변경할 수 있습니다. –

4

다른 사람들이 말한 것보다 두 번째. $ debugFile은 선택적 종속성으로 보이기 때문에 클래스 생성시 정상적인 기본값을 초기화 한 다음 필요한 경우 setter injection으로 변경하는 것이 좋습니다.

define('SITE_PATH', 'C:/webserver/htdocs/somefolder/'); 

class Klass 
{ 
    protected $_debugFile; 
    public function __construct() 
    { 
     $this->_debugFile = SITE_PATH. 'debug/debug.sql' // default 
    } 
    public function setDebugFile($path) 
    { 
     $this->_debugFile = $path // custom 
    } 
} 

하드 코딩 대신 SITE_PATH를 주입하는 것이 더 좋습니다.

관련 문제