【问题标题】:Why is my autoloader loading every class in my wp install?为什么我的自动加载器会加载我的 wp 安装中的每个类?
【发布时间】:2020-02-08 23:11:27
【问题描述】:

我一直在开发一个 wordpress 插件,我不得不在另一个文件中扩展一个类,这是我以前没有做过的。所以这让我开始使用自动加载器。让您了解我的文件夹结构。

我的插件目录

插件/knp-vendor-portal/

我的文件夹结构。

/knp 类

/css

/js

knp-vendor-portal.php

在我的主插件文件中,我使用以下内容加载我的类,但是当我查看查询监视器时,我得到了大量的错误。错误表明 include_once 函数似乎试图从所有其他插件加载数百个类。那么,如果 DIR 名称指向我的类目录,为什么它不只从我的插件中加载类。

这是我在我的主插件文件中使用的代码。

function knp_load_first(){

    //Auto load all the class files
    spl_autoload_register('knpv_autoloader');

   //Some other code calling some methods


}
add_action('plugins_loaded', 'knp_load_first');

function knpv_autoloader($classname){

    include_once plugin_dir_path( __FILE__ ).'knp-classes/'.$classname.'.php';

}

【问题讨论】:

  • 自动加载器会为每个尝试加载时尚未加载的类运行。在尝试从knp-classes 目录加载之前,您需要检查knpv_autoloader 函数中的$classname 是否与您的命名空间匹配。

标签: php wordpress spl-autoload-register


【解决方案1】:

自动加载器会在尝试加载时为每个尚未加载的类运行。在尝试从knp-classes 目录加载它之前,您需要检查knpv_autoloader 函数中的$classname 是否与您的命名空间或命名约定匹配。比如……

function knpv_autoloader($classname)
{
    if (strpos($classname, 'knpv_') !== false) {
        include_once plugin_dir_path( __FILE__ ).'knp-classes/'.$classname.'.php';
    }
}

这假设您的类具有前缀 knpv_,如果您使用命名空间,您也可以检查类似 Knpv\\ 等的名称...

【讨论】:

  • 好吧,这并不是真正的答案,但它确实指出了我命名类和文件的方法无处不在。对我所有的类名和文件名进行排序,正是这篇文章为我指明了方向。
猜你喜欢
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-30
  • 1970-01-01
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多