如何处理不同版本的PHP

时间:2011-02-01 10:38:39

标签: php deployment versions

我正在编写一个Wordpress插件,因此它将被不同的用户和不同的PHP版本使用。问题是我发现一些函数(如json_encode)在PHP 5.3中可用,而在PHP 5.2或更低版本中不可用。这会产生一个大问题,因为大多数用户没有最新版本。

我现在想要在完成99%的插件后,执行以下操作

  1. 使用某种应用程序测试我的代码。我可以把最小的PHP版本放在哪里。那个App。或程序会找到像json_encode这样的函数。不确定这是否可行,但可能会解决我的大部分问题。
  2. 是否可以在PHP中获取PHP函数的本机代码。我不确定它们是否是用PHP编写的,如果有的话我在哪里可以得到它们。如果没有,找到这些功能的替代品的最佳选择是什么。当然,我不想从头开始重新编码
  3. 实现这些功能的最佳方法是什么。我发现一些开发人员检查PHP版本,而其他开发人员检查函数是否存在。哪一个最好,为什么?
  4. 还希望了解您的部署策略以及您如何处理该特定问题。

4 个答案:

答案 0 :(得分:2)

2.Nope。它们由用C编写的编译扩展提供。对于json_encode(BTW自5.2以后可用,而不是5.3),您可以使用Zend_Json作为替代

3.如果你想100%确定,检查功能是否存在是最好的。毕竟,可以运行PHP的自编译版本,而不是所有核心功能都可用。检查PHP版本号,以了解命名空间,异常链等功能是否可用。

答案 1 :(得分:2)

您可以使用PEAR的

  • PHP_Compat为旧版本的PHP和
  • 提供缺少的功能
  • PHP_CompatInfo找出运行代码所需的最低版本和扩展程序

如果您想提供自己的用户态函数或类实现,建议您将它们包含在function_existsclass_exists块中,这样它们就不会干扰提供这些方法的PHP版本。

答案 2 :(得分:1)

我真的不知道Wordpress插件是如何工作的,但除非你真的希望你能够在旧的PHP版本上运行,否则你需要检查可用的功能并提供一个替代方案,这可能会导致代码很乱。

如果可以,并希望教育您的用户,您可以简单地version_compare()功能将版本与经过良好测试和完全功能的PHP版本进行比较,并向最终用户发送教育和解释性消息。

if (version_compare(PHP_VERSION, '5.3.0') <= 0) {
    echo 'You need to run PHP 5.3.0 to use this plugin';
}

答案 3 :(得分:0)

Re 1.)可能有这样的应用程序,但也可能没有。您通常要做的是密切关注您在手册中使用的每个功能,其中说明了需要哪些PHP版本。

Re 2.)如果函数只是PHP 5.3或5.2,您通常会在User Contributed Notes或Stack Overflow中找到替换建议。 (小心你使用的是,UCN中的很多代码都是 - 但在这种情况下,通常至少有一条评论这样说。)

重新。 3.)它可能无关紧要,但检查功能是否存在肯定是最安全的方式。