W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
“完成,好過完美?!? -- 臉譜書文化之一
變量名稱 | 是否啟動時自動注冊 | 是否必須 | 接口/類 | 作用說明 |
---|---|---|---|---|
loader | 否 | 是 | PhalApi_Loader | 自動加載:負責PEAR風格下類的自動加載,需要手動注冊,指定項目路徑 |
config | 否 | 是 | PhalApi_Config | 配置:負責項目配置的讀取,需要手動注冊,指定存儲媒介,默認是PhalApi_Config_File |
logger | 否 | 是 | PhalApi_Logger | 日志紀錄:負責日志的寫入,需要手動注冊,指定日志級別和存儲媒介,默認是PhalApi_Logger_File |
request | 是 | 是 | PhalApi_Request | 接口參數(shù)請求:用于收集接口請求的參數(shù) |
response | 是 | 是 | PhalApi_Response | 結果響應:用于輸出返回給客戶端的結果,默認為PhalApi_Response_Json |
notorm | 否 | 推薦 | PhalApi_DB_NotORM | 數(shù)據(jù)操作:基于NotORM的DB操作,需要手動注冊,指定數(shù)據(jù)庫配置 |
cache | 否 | 推薦 | PhalApi_Cache | 緩存:實現(xiàn)緩存讀寫,需要手動注冊,指定緩存 |
filter | 否 | 推薦 | PhalApi_Filter | 攔截器:實現(xiàn)簽名驗證、權限控制等操作 |
crypt | 否 | 否 | PhalApi_Crypt | 對稱加密:實現(xiàn)對稱加密和解密,需要手動注冊 |
curl | 否 | 否 | PhalApi_CUrl | CURL請求類:通過curl實現(xiàn)的快捷方便的接口請求類,需要手動注冊 |
cookie | 否 | 否 | PhalApi_Cookie | COOKIE的操作 |
debug | 否 | 否 | boolean | 應用級的調試開關,通??蓮呐渲米x取,暫時框架未用到 |
_formatterArray | 否 | 否 | PhalApi_Request_Formatter_Array | 數(shù)組格式化服務(系統(tǒng)內部使用) |
_formatterBoolean | 否 | 否 | PhalApi_Request_Formatter_Boolean | 布爾值格式化服務(系統(tǒng)內部使用) |
_formatterCallable | 否 | 否 | PhalApi_Request_Formatter_Callable | 回調格式化服務(系統(tǒng)內部使用) |
_formatterDate | 否 | 否 | PhalApi_Request_Formatter_Date | 日期格式化服務(系統(tǒng)內部使用) |
_formatterEnum | 否 | 否 | PhalApi_Request_Formatter_Enum | 枚舉格式化服務(系統(tǒng)內部使用) |
_formatterFile | 否 | 否 | PhalApi_Request_Formatter_File | 上傳文件格式化服務(系統(tǒng)內部使用) |
_formatterFloat | 否 | 否 | PhalApi_Request_Formatter_Float | 浮點數(shù)格式化服務(系統(tǒng)內部使用) |
_formatterInt | 否 | 否 | PhalApi_Request_Formatter_Int | 整數(shù)格式化服務(系統(tǒng)內部使用) |
_formatterString | 否 | 否 | PhalApi_Request_Formatter_String | 字符串格式化服務(系統(tǒng)內部使用) |
當需要判斷一個DI服務是否已被注冊,出于常識會這樣判斷:
if (isset(DI()->cache)) {
但這樣的判斷永遠為false,不管注冊與否。
追其原因在于,DI類使用了魔法方法的方式來提供類成員屬性,并存放于PhalApi_DI::$data中。
這就導致了如果直接使用isset(DI()->cache)的話,首先不會觸發(fā)魔法方法 PhalApi_DI::__get($name)的調用,其次也確實沒有PhalApi_DI::$cache這個成員屬性,最終判斷是否存在時都為false。
簡單來說,以下兩種判斷,永遠都為false:
//永遠為false
var_dump(isset(DI()->XXX));
var_dump(!empty(DI()->XXX));
正確的用法應該是:
//先獲取,再判斷
$XXX = DI()->XXX;
var_dump(isset($XXX));
var_dump(!empty($XXX));
這里,可能會對大家?guī)硪欢ǖ睦Щ?,所以在這里特別進行說明。也對框架中這一點不合理的設計深感抱歉。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: