2011-02-01 136 views
0

我正在寫一個Wordpress插件,所以它會被不同的用戶和不同的PHP版本使用。問題是我發現一些函數(如json_encode)在PHP 5.3中可用,而不是在PHP 5.2或更低版本中。這造成了一個大問題,因爲大多數用戶沒有最新版本。如何處理不同版本的PHP

我現在想,讓插件99%完成後,與某種應用程序的執行以下操作

  1. 測試我的代碼。在那裏我可以把最低的PHP版本。那個App。或程序會找出像json_encode這樣的函數。不知道這是否可能,但可能會解決我的大部分問題。
  2. 是否有可能在PHP中獲取PHP函數的本機代碼。我不確定它們是否用PHP編寫,如果是的話,我可以在哪裏得到它們。如果沒有,找到這些功能替代品的最佳選擇是什麼。當然,我不想從零開始重新編碼它們
  3. 什麼是實現這些功能的最佳方法。我發現一些開發人員檢查PHP版本,而另一些開發人員檢查函數是否存在。哪一個最好,爲什麼?

也很想了解您的部署策略以及您如何處理該特定問題。

+1

`function_exists()`是你的朋友http://php.net/manual/en/function.function-exists.php – 2011-02-01 10:44:08

回答

0

Re 1.)可能有這樣的應用程序,但也可能沒有。你通常想要做的就是保持關於你在手冊中使用的每個函數的緊密標籤,這些函數說明需要什麼樣的PHP版本。

Re 2.)如果函數只是PHP 5.3或5.2,您通常會在用戶註釋或堆棧溢出中找到替換建議。 (請注意你使用的雖然,在UCN的很多代碼是不好 - 但在這種情況下,通常至少有一條評論這樣說。)

Re。 3.)它可能沒有關係,但檢查函數是否存在肯定是最安全的方法。

2

2.不需要。它們由用C編寫的編譯擴展提供。對於json_encode(自5.2版本開始可用,而不是5.3版本),您可以使用Zend_Json作爲替代方案

3.如果函數存在,則檢查是否是最好的,當然。畢竟,人們可以運行PHP的自編譯版本,而不是所有可用的核心功能。檢查PHP的版本號,瞭解像名稱空間,異常鏈等功能是否可用。

+0

是的,這可因爲5.2,但它甚至更糟,因爲5.2版只接受1參數,而5.3版本接受兩個參數。任何想法如何檢查參數的存在,因爲function_exist在這裏沒有幫助? – 2011-02-01 10:58:34

+1

你會在惡性循環中試圖這樣做。只需選擇您將支持的最低PHP版本,然後編寫代碼,以便您的插件可以使用它。 – Mchl 2011-02-01 12:10:01

2

您可以使用PEAR的

  • PHP_Compat提供缺失的功能較舊版本的PHP和
  • PHP_CompatInfo找出最低版本和一段代碼所需的擴展運行

如果您想提供自己的用戶級功能或類的實現,建議您將它們提供到function_existsclass_exists塊中,所以他們不會干涉提供這些方法的PHP版本。

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'; 
}