2012-01-16 2 views
0

<root>/incl/classes 폴더에서 클래스를 자동로드하려고합니다.자동로드 클래스 문제

예를 들어 어떤 클래스를 호출하면 문제가 생깁니다. 그

 $ip= new ip(); 
     $ip=$ip->get(); 

PHP와 같은 ip 오류 메시지가 공지 사항을 제공합니다 : 정의되지 않은 변수를 : 경로를. 그러나 실제로 파일이 이미 나는 페이지의 상단에있는 모든 다양한 경로를 선언하고있어

enter image description here

존재한다.

define("ds", DIRECTORY_SEPARATOR); 
$path = array(); 
$path['root'] = $_SERVER['DOCUMENT_ROOT']; 
$path['common'] = $path['root'] . ds . "common"; 
$path['design'] = $path['root'] . ds . "design"; 
$path['contents'] = $path['root'] . ds . "contents"; 
$path['content_images'] = $path['root'] . ds . "content" . ds . "images"; 
$path['design_images'] = $path['root'] . ds . "design" . ds . "images"; 
$path['blocks'] = $path['contents'] . ds . "blocks"; 
$path['includes'] = $path['root'] . ds . "incl"; 
$path['pages'] = $path['contents'] . ds . "pages"; 
$path['classes'] = $path['includes'] . ds . "classes"; 

$files = glob("common" . ds . "*.php"); 
array_unshift($files, $path['common'] . ds . "settings.php", $path['common'] . ds . "db.php"); 
foreach ($files as $filename) 
    require_once $filename; 

//Auto loading classes 
function __autoload($class_name) { 
    if (file_exists($path['classes'] . ds . $class_name . '.php')) { 
     require_once($path['classes']. ds . $class_name . '.php'); 
    } else { 
     die($path['classes'] . ds . $class_name . '.php'); 
    } 
} 

die($path['classes'] . ds . $class_name . '.php'); 라인을 추가했습니다. \ip.php을 출력합니다. 나는 왜 내가 전에 그것을 선언했다 할지라도 $ path [ 'classes']를 echo하지 않는가?

답변

3

범위 지정 문제입니다. $path 변수가 자동로드 기능에 없습니다. 이는 전역 변수이므로 명시 적으로 "초대"해야합니다.

function __autoload($class_name) { 
    global $path; 

실제로 이에 대한 알림을 받았어야합니다.

+0

))) 내가 어떻게 알아 차리지 못했습니까?!)) 어쨌든 thx. 어떤 xdebug도 그 사실에 대해 어떤 통보도하지 않았다. –

관련 문제