這可能是一個明顯的問題,但我想確定。PHP預定義的接口和SPL - 版本檢查是否足夠?
我試圖弄清楚在哪個版本中出現「Predefined Interfaces」。我的假設是5.0.0,因爲這是根據文檔添加SPL接口的時候。
此外,可以通過配置或重新編譯禁用這些功能,還是可以安全地假定版本檢查是否滿足其存在?爲什麼他們甚至與SPL分開,是區別對手,只是這些不能關閉,而SPL可以呢? (至少在5.3.0之前)
這可能是一個明顯的問題,但我想確定。PHP預定義的接口和SPL - 版本檢查是否足夠?
我試圖弄清楚在哪個版本中出現「Predefined Interfaces」。我的假設是5.0.0,因爲這是根據文檔添加SPL接口的時候。
此外,可以通過配置或重新編譯禁用這些功能,還是可以安全地假定版本檢查是否滿足其存在?爲什麼他們甚至與SPL分開,是區別對手,只是這些不能關閉,而SPL可以呢? (至少在5.3.0之前)
你可以找到每個SPL接口可用的版本here。有些是在5.0之後添加的。並且根據the manual從PHP 5.3.0起SPL不能被禁用。
我沒有比你添加接口的時候的假設更好的答案,或者差異是什麼(在PHP CVS中挖掘5分鐘沒有產生一個) 。
但是,有一個防彈的方法來檢查它們的存在,而不是依靠版本檢查:interface_exists
。對於PHP版本5.0.0和5.0.1,您需要改爲class_exists
。
所以:
function interfaces_defined() {
// Most likely case first
if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
return true;
}
else if (version_compare(PHP_VERSION, '5.0.0', '<')) {
return false;
}
else if (version_compare(PHP_VERSION, '5.0.1', '<=')) {
return class_exists('Iterator');
}
else {
return interface_exists('Iterator');
}
}
不是最漂亮的,但它肯定涵蓋了所有的基地。
我會投你的評論,如果我不只是困擾,使一個帳戶,並沒有代表這樣做!儘管它不像其他一些人那樣直接回答,但A +爲了透徹:D – pospi 2011-04-05 09:42:51
輝煌。我之前正在查看該網站,但沒有意識到那裏也有版本信息。 喜歡文檔的那一部分只是坐在別人的主目錄中:p – pospi 2011-04-05 09:40:32