【问题标题】:__DIR__ and autoloading php__DIR__ 和自动加载 php
【发布时间】:2013-05-15 10:44:54
【问题描述】:

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

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.

【问题讨论】:

  • 错误是什么?调试的最佳方法是 var_dump($paths) 然后查看确切的路径是什么。
  • 它不加载文件,..
  • 让它require_once,打赌它会抛出一个错误然后......

标签: php include autoload bootstrapping


【解决方案1】:
自动加载文件中的

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;
    }
}

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

【讨论】:

  • 这仍然不起作用。我附和它并说../system/File.php,但仍然不包括它。
  • 你能把你的目录结构放在原来的问题中吗?我们将能够看到问题所在并解决你的问题
  • 如果它在 OP 中,那么您在任何地方都没有系统或模型或 dao 目录。
  • 好的,它现在可以工作了......也许我重新启动了计算机,并且不知何故它可以与这个system/
【解决方案2】:

我会这样尝试。 在加载 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
);

【讨论】:

  • 我想知道你的代码是从哪里得到的,哈哈,..它真的和我之前的相似,包括 cmets..
  • +1 我使用 DS 和 PATH_ROOT 常量。在你的引导程序中声明这些,你就可以开始了!
  • geez...您应该阅读有关为什么全局状态不好...一件事,'/' 是跨平台的,无需使用 DS 或 DIRECTORY_SEPARATOR
猜你喜欢
  • 2023-03-05
  • 2011-01-31
  • 1970-01-01
  • 2013-08-04
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
  • 2015-07-15
相关资源
最近更新 更多