2010-04-22 7 views
1

필요시 다른 파일에 객체를로드 할 수있는 PHP 객체를 만들려고합니다. 내 문제는 내가 클래스 정의에 대한 파일 위치를 기반으로 파일을 참조 할 때 파일을 찾을 수 없다는 것입니다. 그래서 파일 구조 :PHP 객체 내의 파일 참조는 어떻게 작동합니까?

/Test.php는

/os/os.php (확장 커널)

/os/kernel.php

/os/libraries/lib1.php

애에서

/os/libraries/lib2.php

/os/libraries/lib3.php

rnel.php, 라이브러리는 'libraries/lib1.php'로 참조됩니다. Test.php에서 "os"개체를 만드는 경우. lib 파일을 찾을 수 없습니다.

답변

0

클래스에 적합한 명명 규칙을 사용하고 include_path를 사용하고 spl_autoload를 사용하십시오. exemple 들어

:

이름이 같은 수업 : 클래스 O를 클래스 커널 클래스 Libraries_Lib1 ...

은 당신의 경로를

set_include_path(implode(PATH_SEPARATOR, array(
    realpath('os/'), 
    get_include_path(), 
))); 
spl_autoload_register("autoload"); 

을 포함 등록하고 자동로드를 사용합니다 :

function autoload($className) { 
    $name = implode("/", explode("_", $className)); 
    require_once(strtolower($name) . ".php"); 
} 
0

(파일 이름이나 절대 경로가 아닌) 상대 경로를 지정하면 PHP가 $_SERVER['SCRIPT_FILENAME'] (실행 된 주 스크립트)에 상대 경로를 포함하려고하므로 일치하지 않는 결과가 발생한다고 생각합니다.

당신은 당신이 항상 포함됩니다 알고있는 파일, 예를 들어 어딘가에 절대 경로를 정의 할 수 있습니다 : 당신이 다른 파일을 포함하는 경우 (kernel.php 등의) 다음

<?php 
//e.g. this could be file os/kernel.php 
//define absolute path to libraries dir 
define('LIBRARY_PATH', dirname(__FILE__) . '/libraries'); 

과 다른 곳에서 이것을 사용 :

<?php 
include LIBRARY_PATH . '/lib1.php'; 
관련 문제