Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 无损spl_自动加载_寄存器_Php_Wordpress - Fatal编程技术网

Php 无损spl_自动加载_寄存器

Php 无损spl_自动加载_寄存器,php,wordpress,Php,Wordpress,我想在我正在开发的wordpress插件中使用通过spl_autoload_register动态加载类,但问题是它不能干扰此功能的现有实现。在我最初的尝试中: // register an autoloader function for template classes spl_autoload_register ( 'template_autoloader' ); function template_autoloader ( $class ) { include LG_FE_DIR

我想在我正在开发的wordpress插件中使用通过spl_autoload_register动态加载类,但问题是它不能干扰此功能的现有实现。在我最初的尝试中:

// register an autoloader function for template classes
spl_autoload_register ( 'template_autoloader' );

function template_autoloader ( $class ) {
    include LG_FE_DIR . "/includes/chart_templates/class.{$class}.php";
}
似乎可以加载我自己的类,但同时也会导致其他插件出现大量错误,这些插件显然也在使用spl_autoload_register功能


有什么想法吗?

我相信我现在有一个合理的解决方案,但我愿意听取其他人的意见。我的解决方案是先让模板加载器函数测试文件是否存在。我还选择继续钩住“init”钩子,以便首先加载静态include/requires(或者至少加载其中的大多数)。该函数现在如下所示:

add_action ( 'init' , 'class_loader' );

function class_loader () {
    // register an autoloader function for template classes
    spl_autoload_register ( 'template_autoloader' );
}

function template_autoloader ( $class ) {
if ( file_exists ( LG_FE_DIR . "/includes/chart_templates/class.{$class}.php" ) ) 
    include LG_FE_DIR . "/includes/chart_templates/class.{$class}.php";

}

好的,通过添加对spl_autoload_register的调用作为“init”钩子的一部分,我已经改善了我的情况,我想这允许在运行我的autoloader之前执行大多数静态requires/includes。这被认为是在插件中这样做的“正确方式”(或者至少是“可接受的方式”)吗?您可能会在autoloader中包含一些条件;例如,如果您的类有一个公共前缀,并且该前缀与提供的
$class
匹配。您从其他插件中得到了什么类型的错误?示例错误主要有以下几种:警告:include()[函数.include]:在第59行的/wp content/plugins/lg frontend classes/index.fronted.php中打开“/wp content/plugins/lg frontend classes/includes/chart_templates/class.AppLogger.php”以包含(include_path=':/Applications/MAMP/bin/php/php5.3.6/lib/php”)失败。这是我根据您遇到的错误提出的建议。因为您只想自动加载自己的类,所以在尝试包含这些文件之前,应该先检查它们是否存在。spl自动加载器将继续调用其他已注册的自动加载器,直到其中一个能够加载所需的类。是的,这绝对是“drew inspired”。谢谢你的建议。你能告诉我为什么你要把你的类加载器函数包装在添加动作函数中吗?当我这样做时,它对我不起作用,但当我只对spl_自动加载_寄存器进行编码时,它确实起作用。谢谢。@marczoid如果您只在wordpress环境中工作,则add_action()函数是有效的。此函数允许您挂接到代码执行的正确部分以执行某些操作(在此过程中注册自动加载器)。对不起,我可能应该更清楚这一点。