首先感谢您抽出时间。我在我的2个插件中使用自动加载。他们必须使用不同的名称空间,但我想为这两个插件构建一个自动加载的主插件。将来我会添加更多插件。我应该如何组织?在插件中,我必须使用名称空间
namespace plugin_namespace\\controller\\some_cntr
和
namespace sec_plugin_namespace\\controller\\some_cntr
所有东西都是面向对象的,这是我的自动加载器witch存在于两个插件中(如果可能的话,我只会有一个:))
/**
* Register autoloader
*/
public function autoloader(){
spl_autoload_register( array( $this, \'xx_my_plugin\' ) );
}
/**
* Autoloader
*
* @param $class
*/
public function xx_my_plugin( $class ) {
$first = strpos($class, \'\\\\\') + 1;
$path = substr( $class, $first);
$path = strtolower( $path );
$path = str_replace( \'_\', \'-\', $path );
$path = str_replace( \'\\\\\', DIRECTORY_SEPARATOR, $path ) . \'.php\';
$path = __DIR__ . DIRECTORY_SEPARATOR . $path;
if ( file_exists( $path ) ) {
include $path;
}
}
SO网友:Sebastian Kurzynowski
好啊问题已解决。正如我所说,我添加了插件来管理autoloader和其他东西。我更换了自动装弹机,正因为如此,我才有了一台自动装弹机来代替3台。解决方案是用插件名称更改一个目录。这是我的自动加载器:
public function xx_main_plugin( $class ) {
$array = explode(\'\\\\\', $class);
$plugin = str_replace(\'_\', \'-\', $array[0]);
$dir = str_replace( \'in-this-plugin-is-autoloader\', $plugin, __DIR__);
$first = strpos($class, \'\\\\\') + 1;
$path = substr( $class, $first);
$path = strtolower( $path );
$path = str_replace( \'_\', \'-\', $path );
$path = str_replace( \'\\\\\', DIRECTORY_SEPARATOR, $path ) . \'.php\';
$path = $dir . DIRECTORY_SEPARATOR . $path;
if ( file_exists( $path ) ) {
include $path;
}
}