2012-11-15 30 views
0

我沒有安裝PHP 5.2來測試。在PHP 5.2上使用帶有命名空間的class_exists

我想使用if (class_exists('Composer\Autoload\ClassLoader'))來測試是否安裝了composer,但是我的代碼需要與PHP 5.2兼容。

PHP 5.2會卡住反斜槓字符嗎?或者只是返回false並繼續使用腳本?

+0

出於興趣,您最近需要支持5.2的原因是什麼?它近兩年前就已經結束了生命,從那時起它一直沒有任何安全補丁。沒有一個理智的網絡管理員會允許它靠近他們的系統。 – SDC

+0

哈,我完全同意。我只是向一個開源項目提交一個小補丁,並試圖不打破任何東西。我推動讓他們放棄5.2支持,但:) –

回答

2

命名空間在PHP 5.2中不存在 - 它們是作爲PHP 5.3中的新功能添加的。

所以直接回答你的問題是,PHP 5.2會卡在反斜槓上,因爲就它而言,它不是有效的語法。

您引用的代碼行本身在語法上無效,因爲正如您指出的那樣,它只是一個字符串。將它傳遞給class_exists()可能會破壞事物 - 但我也沒有PHP 5.2的副本可以再次確認。如果我猜測,我希望它會拋出某種警告或注意,而不是完全吹噓。

但是作曲家本身不能使用5.2,所以如果用戶在5.2上,那麼根據定義他們不能安裝Composer。因此我建議你可以通過直接檢查PHP版本,通過調用phpversion()version_compare()來避免整個問題。這將允許您避免撥打class_exists()電話的任何不愉快。

+0

這只是一個字符串,但。它實際上會拋出一個錯誤,還是會返回錯誤並讓我繼續處理事情? –

+0

編輯了答案。 :) – SDC

+0

啊,甚至在調用class_exists之前檢查5.3的好主意。在這種情況下,我剛剛結束了對'ComposerAutoloaderInit'的測試,而不是迴避整個問題,但是我仍然有興趣在5.2上試試這個,看看會發生什麼。 –