2011-04-05 46 views
2

這可能是一個明顯的問題,但我想確定。PHP預定義的接口和SPL - 版本檢查是否足夠?

我試圖弄清楚在哪個版本中出現「Predefined Interfaces」。我的假設是5.0.0,因爲這是根據文檔添加SPL接口的時候。

此外,可以通過配置或重新編譯禁用這些功能,還是可以安全地假定版本檢查是否滿足其存在?爲什麼他們甚至與SPL分開,是區別對手,只是這些不能關閉,而SPL可以呢? (至少在5.3.0之前)

回答

1

你可以找到每個SPL接口可用的版本here。有些是在5.0之後添加的。並且根據the manual從PHP 5.3.0起SPL不能被禁用。

+0

輝煌。我之前正在查看該網站,但沒有意識到那裏也有版本信息。 喜歡文檔的那一部分只是坐在別人的主目錄中:p – pospi 2011-04-05 09:40:32

1

我沒有比你添加接口的時候的假設更好的答案,或者差異是什麼(在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'); 
    } 
} 

不是最漂亮的,但它肯定涵蓋了所有的基地。

+0

我會投你的評論,如果我不只是困擾,使一個帳戶,並沒有代表這樣做!儘管它不像其他一些人那樣直接回答,但A +爲了透徹:D – pospi 2011-04-05 09:42:51

1

目前,手冊僅顯示屬於每個接口的方法的版本信息。此版本信息可在方法原型上方的頁面頂部找到(info)。

因此,請點擊方法說明並查看列出的內容。

這些可以通過配置或重新編譯禁用,還是可以安全地假設版本檢查滿足他們的存在?爲什麼他們甚至與SPL分開,是區別對手,只是這些不能關閉,而SPL可以呢? (至少在5.3.0之前)

這些接口根本不是SPL擴展的一部分,也沒有啓用或禁用它們。他們被要求在Zend引擎中實施;它不可能做到他們在SPL的擴展中所做的事情。


對於什麼是值得的,我開了一個功能請求(#49927)前一段時間有關使可用的版本信息類(因此也接口)概述/概要頁。感謝提醒我,它存在並且會有用!