dongyata3336 2011-04-27 23:50
浏览 22
已采纳

类与插件框架冲突 - PHP / Wordpress

I'm in the beginning stages of writing a basic MVC WordPress plugin development framework, and I'm realizing I'm going to have a naming conflict issue. If I want to include this framework in several of the plugins and/or themes I'm developing, eventually I'm going to run into an issue that class_exists() isn't going to solve.

I could create the framework as a stand-alone plugin, but that would require anyone who downloaded one of my plugins or themes to also download the framework, which doesn't seem realistic (especially for upgrades to existing plugins that don't have such a dependency currently).

Anyway, I figured many of you out there have probably run into these same issues, and I wanted to see if anyone had developed a good strategy to manage the problem.

If possible, I don't what to have to have a unique prefix per plugin (that will making updating the framework a nightmare). I'm hoping there's some clever way to dynamically name each of these classes without having to hard code it.

  • 写回答

3条回答 默认 最新

  • dsarttv037029 2011-05-26 18:48
    关注

    The solution I ended up choosing was to create a bootstrap.php file, have each instance of the framework register (in a global variable) what version it is and its file path. Then I register an action to run after all plugins/theme are loaded which compares all versions and only loads the classes associated with the most recent version.

    The only downside I see to this is that I'd have to make sure my framework is backwards compatible, but I planned on doing that anyway.

    Here is the code I used in my bootstrap file. Obviously the version number in each instance of the framework would need to correspond to the version number of the framework included.

    // register this version of the framework
    $GLOBALS['pw_framework_meta']['0.1.2'] = __FILE__;
    
    if ( !function_exists('pw_framework_init') ) {
    
        /**
         * Sort the $GLOBALS['pw_framework_meta'] variable for the latest registered
         * version of the framework. Include the PW_Framework.php file and then call init()
         */
        function pw_framework_init()
        {
            // get all the different versions registered with $GLOBALS['pw_framework_meta']
            $versions = $GLOBALS['pw_framework_meta'];
    
            // sort the versions
            uksort($versions, 'version_compare');
    
            // get the latest versions (the last in the array)
            $latest = end($versions);
    
            if ( !class_exists('PW_Framework') ) {
                require_once( dirname($latest) . '/PW_Framework.php' );
            }
            PW_Framework::init();
        }
    
        // register pw_framework_init() with the 'after_setup_theme' hook
        // This way we can ensure that all plugins or themes that might be using PW_Framework
        // have had a chance to register with the $GLOBALS['pw_framework_meta'] variable
        add_action( 'after_setup_theme', 'pw_framework_init' );
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 在不同的执行界面调用同一个页面
  • ¥20 基于51单片机的数字频率计
  • ¥50 M3T长焦相机如何标定以及正射影像拼接问题
  • ¥15 keepalived的虚拟VIP地址 ping -s 发包测试,只能通过1472字节以下的数据包(相关搜索:静态路由)
  • ¥20 关于#stm32#的问题:STM32串口发送问题,偶校验(even),发送5A 41 FB 20.烧录程序后发现串口助手读到的是5A 41 7B A0
  • ¥15 C++map释放不掉
  • ¥15 Mabatis查询数据
  • ¥15 想知道lingo目标函数中求和公式上标是变量情况如何求解
  • ¥15 关于E22-400T22S的LORA模块的通信问题
  • ¥15 求用二阶有源低通滤波将3khz方波转为正弦波的电路