1

我已经浏览过有关此主题的网站,但我仍然感到困惑。我已经解决了我的问题,但我内心深处知道我有点被骗了,这是一个可能导致我进一步出现问题的修复程序。让我解释一下我在哪里:

这是一个像这样的目录结构文件夹>> [文件夹名称]:

/site root
[ajax-loads]
   showorder.php

[bcls] << For bespoke classes
   class.order.php

[cls] << For classes
   class.main.php
   class.db.php
   class.sql.php
   ...
   ...

dashboard.php
index.php
config.php

...
.. etc etc

所以上面我展示了我有 2 个文件夹,其中包含供我使用的类,其中大多数是通过 class.main.php 中的 __autoload 调用的。我遇到的问题是当我使用 jQuery 将新内容“加载()”到 div 中时;行为发生变化,自动加载的路径是相对于 ajax-load 文件而不是相对于 class.main.php。目前我有以下代码,我觉得可以这么说是被骗了。

//PATHS & AUTOLOAD
set_include_path("./cls");
set_include_path("../cls");
set_include_path("./bcls");
set_include_path("../bcls");
//INVESTIGATE THIS NONESENSE ABOVE!

function __autoload($class_name)
{
    require_once 'class' . '.' . $class_name . '.' . 'php';
}

在文件的前面,我的 config.php 文件遇到了同样的问题,我已经修复了临时文件:

set_include_path("./");
set_include_path("../");

现在让我指出这是我决定摆脱程序编码的第一个大项目,这是我第一次真正体验自动加载。我真的需要更好地理解这一点,而不是成为复制粘贴编码器;我在这里的理解中遇到了一个空白。除了更正代码之外,有人会解释正确的代码在做什么,因为我尝试了一些“解决方案”,但在模仿其他人的例子后我仍然得到奇怪的结果。

爱和亲吻安迪

4

1 回答 1

0

如果你真的想修改包含路径,那么你应该像这样使用它:

define('BASE_PATH', $_SERVER['DOCUMENT_ROOT']);

// ...

set_include_path(
    BASE_PATH . '/bcls' .
    PATH_SEPARATOR . BASE_PATH . '/cls' .
    PATH_SEPARATOR . get_include_path() .
    PATH_SEPARATOR . '.'
);

虽然,我建议您重命名文件夹。强烈建议不要使用这样的缩写变量、类、函数、文件夹等。您是否考虑过使用某种 PHP 框架?这样做可能会对您的努力有所帮助,并且您可以避免重新发明轮子。

如果你想要轻量级,那么考虑使用 Kohana 或 CodeIgniter。否则我推荐 Zend 框架。

于 2011-12-19T10:37:11.217 回答