Reorganization of namespaces

时间:2016-12-14 作者:Sebastian Kurzynowski

首先感谢您抽出时间。我在我的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;
    }
}

1 个回复
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;
    }
}

相关推荐

当回调作为数组的一部分传递时,不会在addsetingsfield()中调用,但会识别出它就在那里。它使用OOP将类传递到类

我正在构建一个插件,我创建了一个新的管理页面和子页面,在这个子页面中,我想添加一些设置。这就是我使用设置API构建它们的原因我正在使用Composer和面向对象编程。我有一个名为SettingsAPI的文件夹,名称空间如下namespace Blocks\\Pages\\SettingsAPI;在该文件夹中,我有三个文件:AddSettings.php, Settings.php 和SettingsLayout.php. 它们三个都正确连接。这些文件具有区分大小写的类名称。Settings.php 有一个