自动装载机没有找到适当的地方

时间:2013-07-12 17:33:45

标签: php wordpress autoloader

关于WordPress,你有两个主要功能:get_template_directory()get_stylesheet_directory(),其中第一个将在主题文件夹中查找,而另一个将在子主题目录中查找。

如果我们将这些结合起来,我们可以制作一个自动加载器,它包括:

public function get_instance(){
    if(null == self::$_instance){
        self::$_instance = new self();
    }

    self::$_directories = array(
        get_template_directory(),
        get_stylesheet_directory(),
    );

    return self::$_instance;
}

public function load_class($class){
    $path = str_replace('_', '/', $class);
    foreach(self::$_directories as $directories){
        if(file_exists($directories . '/' . $path . '.php')){
            require_once($directories . '/' . $path . '.php');
        }
    }
}

这些函数显然属于一个然后实例化的类。所有人都在这里说,使用Folder_SubFolder_ClassName的命名标准寻找一个类,用'_'代替'/'并将.php添加到结尾。没那么难。

每次都有效。子主题类可以加载父主题类,父主题类可以相互调用而不用担心require_once()

现在让我们投入一些东西。让我们假设您的主题使用自定义/包,并且您有一个类,显而易见的答案是将get_instance()更改为:

public function get_instance(){
    if(null == self::$_instance){
        self::$_instance = new self();
    }

    self::$_directories = array(
        get_template_directory(),
        get_stylesheet_directory(),
        get_template_directory() . '/custom/packages/'
    );

    return self::$_instance;
}

这样的类,一个类如:PackageName_Folder_SubFolder_ClassName{}应该加载,因为它位于custom/packages/PackageName/Folder/SubFolder/ClassName.php内,我们告诉自动加载器,查看这三个地方的类。

那么问题是什么?

我收到一条错误消息,指出PackageName_Folder_SubFolder_ClassName不存在或无法找到。

为什么呢?我在做什么,或者假设,错了?

1 个答案:

答案 0 :(得分:0)

我认为问题是由于/ location / packages的位置。

在输出$directories . '/' . $path . '.php'的load_class foreach循环中放置一个echo。我打赌这会让你搞清楚。您可能需要将public_html路径硬编码为自动加载功能。