2012-01-16 5 views
0

<root>/incl/classesフォルダからクラスを自動読み込みしようとしています。オートロードクラスの問題

問題は、私がexのためにいくつかのクラスを呼び出すときです。 ip

ような
 $ip= new ip(); 
     $ip=$ip->get(); 

PHPはエラーメッセージ通知できます:未定義の変数:パスを。しかし、実際にはファイルがすでに私がページの上部にあるすべての様々なパスを宣言してい

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']をエコーし​​ないのでしょうか?

答えて

3

これはスコープ上の問題です。 $path変数がオートロード機能に存在しません。これはグローバル変数であり、明示的に「招待」する必要があります。

function __autoload($class_name) { 
    global $path; 

これについては、実際に通知する必要があります。

+0

)))私はそれに気付かなかったのですか? ))とにかくthx。 No xdebugはそのことに気づかなかった –

関連する問題