如何避免重复的API类?

时间:2015-07-28 14:16:06

标签: php wordpress namespaces

我试图在我的Wordpress插件中加入commonly used API并遇到重复的类错误。我尝试使用class_exists()进行检查,但无法控制订单插件加载,另一个插件(不检查class_exists)加载到我的后面,然后WP崩溃。

我考虑过编辑API类并添加一个相对唯一的前缀。我还考虑过更新它以使用命名空间。但是,从长远来看,保持第三方代码的变化似乎并不理想。

有没有办法在不直接编辑API代码的情况下完成此操作?如何为API类创建名称空间包装器?

更新:

我看到其他几个人也有同样的问题。在过去的一个月里,我一直在阅读有关最佳实践的文章,但仍未找到任何好的建议。我的软件现在使用了几个可能会发生冲突的API,因为其他插件编写者不会检查class_exists。我不能直接编辑namespace所有这些第三方API,因为有些是非常大/复杂的,我觉得必须有更好的选择。

我仍然很好奇是否有办法为第三方API类创建命名空间' d包装器。或者如果还有其他想法,我非常渴望听到。

1 个答案:

答案 0 :(得分:0)

PHP中的类名被硬编码到源文件中。这包括命名空间。

这实际上是PHP在PHP 5.3中引入了namepsace功能的原因,因此相同的命名类可以驻留在它们自己的命名空间中以防止类名冲突(你可以看到的致命错误和白屏死机)

对于您遇到的问题,您无能为力。原始库需要命名空间。如果该lib的上游供应商无法提供该功能,那么您可以选择分叉库并自行完成工作。然后,您可以考虑将更改作为拉回请求提供给原始项目,以便每个人都可以从您的更改中受益(并且将来可以更轻松地将上游更改集成到您的副本中)。

然而,当它总是在同一个类(来自同一个库)时,那么你只是遇到了wordpress插件的问题:因为wordpress中没有自动加载的共享库(嗯,wordpress核心)可以看作是这样,只是没有自动加载),每个插件必须检查是否需要加载某个类,如果它是在多个插件之间共享的话。如果只有其中一个插件行为不当,你会看到你遇到的崩溃。在这种情况下,您需要修复这些插件并将问题报告给插件供应商。