我创建了几个使用公共类的WordPress插件。插件应单独工作,理想情况下不需要将公共类安装为单独的插件,但也可以在同一安装中激活它们。现在我可以通过执行class_exists检查来防止多次加载类,但我希望更多地控制使用哪个版本的类,最好是最新版本。这是因为用户可能没有更新其中一个插件,它可能正是所使用的公共类的版本。有没有办法进行这样的检查?
我想阻止这种情况发生:
我想到了以下场景:
然而,afaik你不能通过再次定义它来取消/覆盖一个类,对吗?
其他一些信息: 这些类已经分成不同的文件。我想过为每个插件命名一个不同的类,但最终他们会修改相同的内容,当它们一个接一个地这样做时会变得混乱(如果版本不同,则每个都会略有不同)。
答案 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文件。