选择最新版本的课程

时间:2013-04-03 07:20:58

标签: php class versioning wordpress

我创建了几个使用公共类的WordPress插件。插件应单独工作,理想情况下不需要将公共类安装为单独的插件,但也可以在同一安装中激活它们。现在我可以通过执行class_exists检查来防止多次加载类,但我希望更多地控制使用哪个版本的类,最好是最新版本。这是因为用户可能没有更新其中一个插件,它可能正是所使用的公共类的版本。有没有办法进行这样的检查?

我想阻止这种情况发生:

  • 用户安装2个不同的插件:WPFoo& WPBar,他们都使用MyClass。
  • 用户拥有最新版本的WPBar,但是WordPress加载了WPFoo中包含的旧版MyClass,即使他已经在WPBar中拥有最新版本的MyClass。
  • 理想情况下,用户不必担心这一点,因为他已经拥有最新版本。

我想到了以下场景:

  • 定义将存储类版本的全局变量($ myclassversion)
  • WordPress加载公共类的第一次出现&存储其版本
  • WordPress击中了公共类的第二次出现。在加载类之前,将执行class_exists检查,并将$ myclassversion与此类版本进行比较。当此类版本较高时,旧类未设置,并且较新的类已加载。

然而,afaik你不能通过再次定义它来取消/覆盖一个类,对吗?


其他一些信息: 这些类已经分成不同的文件。我想过为每个插件命名一个不同的类,但最终他们会修改相同的内容,当它们一个接一个地这样做时会变得混乱(如果版本不同,则每个都会略有不同)。

1 个答案:

答案 0 :(得分:2)

如果您为包含该版本的类添加常量,则有一种方法。像这样:

 class MyCommonClass {
 constant VERSION = '2';

 // Accessing via INSTANCE
 function showVersion() {
    echo  self::VERSION . "\n<br/>";
 }

 }

 // Accessing globally
 echo  MyCommonClass::VERSION . "\n<br/>";

 // Programmatically As of PHP 5.3.0

 $classname = "MyCommonClass";
 echo $classname::VERSION. "\n<br/>"; // As of PHP 5.3.0

所以检查:

 if(class_exists("MyCommonClass")){
     if (MyCommonClass::VERSION < 2){
         echo "This plugin requires newest version of MyPackage\n<br/>";
         exit(0); 
     }
 };

您还可以将类划分为文件,并通过类检查相应地包含它们。

最后,糟糕的做法是将类包含在这样的文件中:

 <?php
 $versionOfclass = 2;
 if($versionOfClass >= $requiredVersionOfClass) {
 class MyClass {

 }
 }
 ?>

其中$ requiredVersionOfClass来自包含此文件的php文件。