【问题标题】:Autoload class issue自动加载类问题
【发布时间】:2012-01-16 04:28:03
【问题描述】:

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

问题是,当我为 ex 打电话时。 ip 那样

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

PHP 给出错误消息 注意:未定义变量:路径。但实际上文件已经存在

我在页面顶部声明了所有不同的路径。

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

【问题讨论】:

    标签: php class autoload


    【解决方案1】:

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

    function __autoload($class_name) {
        global $path;
    

    其实你应该已经收到通知了。

    【讨论】:

    • OMG))) 我怎么没注意到?! )) 无论如何 thx 。没有 xdebug 没有给出任何通知
    猜你喜欢
    • 2019-07-12
    • 1970-01-01
    • 2014-08-20
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 2014-08-02
    • 2018-07-11
    相关资源
    最近更新 更多