自动加载类问题

时间:2012-01-16 04:28:04

标签: php class autoload

尝试从<root>/incl/classes文件夹自动加载课程。

问题是,当我打电话给某个班级时。这样ip

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

PHP提供错误消息注意:未定义的变量:path。但事实上文件已经存在

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']?

1 个答案:

答案 0 :(得分:3)

这是一个范围问题。您的自动加载功能中不存在$path变量。它是一个全局变量,您需要明确地“邀请”它:

function __autoload($class_name) {
    global $path;

你实际上应该已经注意到了这一点。