2012年11月14日 星期三

php spl_autoload

這兩天在 CI report 上, 一直回報某個 php class not found 的錯誤, 但是怎樣看,
那個 class 確實是有被 require 到, 只是用 get_declared_classes() 是看不到的,


現在很多 php framework, 或者 developer 都會叫人不要再用 require_once() 了,
大概也是這種原因吧.

不要再用 require_once(), 那要用什麼? 答案就是 spl_autoload.

用法其實很簡單, 宣告一個 register function,


function _autoload($class) {
    include $class . '.php';
}

spl_autoload_register('_autoload');

然後把這東西放在 auto_prepend_file 裡面, 就會在每個 request 進來的時候幫你把東西 load 進來了.

--
update: 要注意的是, class name ($class) 要跟檔名一樣, 剛才就遇到同事寫的

class name 是 getXXXX, 但是 filename 是 GetXXXX, 這樣他會抓不到.

沒有留言: