php自動載入類檔案什麼時候來使用?有時候我們可能寫一些代碼不去使用php架構,而是自己寫一個架構或者包,這個時候可能就會涉及多個檔案。在這種情況下,如果只使用命名空間是不能載入其他需要的檔案的。所以我們就要使用php的
spl_autoload_register
來做php檔案自動載入。
涉及到基類的載入有一個小細節需要注意,具體方案如下。
解決方案
通過如下代碼可以自動載入需要的檔案,當php指令碼運行時找不到需要的檔案,就會自動調用 spl_autoload_register
方法。參數 $classname
可以自訂,其值一定是未找到的類的名字(如果調用的時候帶上了命名空間,那麼這個參數也會帶上命名空間)。
spl_autoload_register(function ($classname) { $root = rtrim(dirname(__DIR__), '/') . '/'; $path = str_replace('\\', DIRECTORY_SEPARATOR, strtolower($classname)); require $root.'path/BaseService.php'; require $root.$path.'.php';});
其中 spl_autoload_register
方法的參數可以是個匿名函數,也可以是一個方法的名字(字串類型)
spl_autoload_register('yourFunction');function yourFunction($classname) { $root = rtrim(dirname(__DIR__), '/') . '/'; $path = str_replace('\\', DIRECTORY_SEPARATOR, strtolower($classname)); require $root.'path/BaseService.php'; require $root.$path.'.php';});
需要注意的是,如果載入的類是繼承了另外的一個類,那麼需要將基類優先載入
,然後再載入子類,不然會出現找不到檔案,類未定義的錯誤,即 要注意負載檔案的順序
。