__DIR__和自动加载php

时间:2013-05-15 10:44:55

标签: php include autoload bootstrapping

我不知道这是否是自动加载中的问题,但我遇到了这个问题,这是我的代码:

index.php

require __DIR__ . '/app/autoload.php';

文件夹结构:

index.php
app/
--autoload.php

autoload.php

 function autoloader($className) {
    // List Directories to Autoload Classes
    $paths = array(
        __DIR__ . '/system/',
        __DIR__ . '/app/models/',
        __DIR__ . '/app/dao/'
    );
    foreach($paths as $path) {
        $file = $path . '/' . $className . '.php';
        if (is_file($file))
            include $file;
    }
}

由于某种原因它甚至不起作用:

__DIR__ . '../system/
... et al.

2 个答案:

答案 0 :(得分:2)

自动加载文件中的

DIR 将引用/ app。

尝试:

function autoloader($className) {
    // List Directories to Autoload Classes
    $paths = array(
        '../system/',
        '/models/',
        '/dao/'
    );
    foreach($paths as $path) {
        $file = $path . '/' . $className . '.php';
        if (is_file($file))
            require_once $file;
    }
}

如果失败则开始回显路径和目录以查看它们是否被正确引用。

答案 1 :(得分:0)

我会这样试试。 加载autoload.php之前的任何地方(应该是始终加载的文件,我猜你的情况下是index.php)我会在脚本开头定义ROOT变量somwhere

/**
* Use the DS to separate the directories (just a shortcut)
*/
if (!defined('DS')) {
   define('DS', DIRECTORY_SEPARATOR);
}

/**
* The full path to the directory which holds application files, without a trailing DS.
*/
if (!defined('ROOT')) {
    define('ROOT', dirname(__FILE__)); 
}

然后在您的自动加载中使用ROOT

$paths = array(
    ROOT . DS. 'system' . DS,
    ROOT . DS. 'app' . DS . 'models' . DS,
    ROOT . DS. 'app' . 'dao' . DS
);