您好,登錄后才能下訂單哦!
這篇文章主要介紹PHP MVC框架中類自動加載機制的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
具體如下:
原文
實現類的自動加載主要使用到了set_include_path
和spl_autoload_register
函數。
set_include_path
用于提前設置好可能會加載的類的路徑。
spl_autoload_register
用于調用相關自動加載所需類的函數,實現自動載入的功能。
有一點要注意的是:自動加載在實例化類的時候執行,也就是說使用extends繼承類的時候,是不會自動加載父類的。
設置目錄如下:
實現自動加載功能相關的文件有:Loader.php,config.php,boot.php,index.php
config.php
<?php /** * Created by PhpStorm. * User: koastal * Date: 2016/5/15 * Time: 10:48 */ define("APP_PATH",__DIR__."/.."); define("Controller_PATH",__DIR__."/../controller"); define("Model_PATH",__DIR__."/../model"); define("View_PATH",__DIR__."/../view");
Loader.php
<?php /** * Created by PhpStorm. * User: koastal * Date: 2016/5/15 * Time: 12:03 */ class Loader { public static function baseLoad() { require_once("Controller.php"); require_once("Model.php"); } public static function autoload($class) { $path = $class.".class.php"; require_once($path); } } $include = array(Controller_PATH, Model_PATH,View_PATH); set_include_path(get_include_path() . PATH_SEPARATOR .implode(PATH_SEPARATOR, $include)); spl_autoload_register(array('Loader', 'autoload')); Loader::baseLoad();
boot.php
<?php /** * Created by PhpStorm. * User: koastal * Date: 2016/5/15 * Time: 12:19 */ require_once("Loader.php");
index.php
<?php require_once(__DIR__."/libs/config.php"); require_once(__DIR__."/libs/boot.php"); $obj = new testController(); $obj->show();
經測試,以上代碼可用,全文完。
加更
經測試上面的代碼,在訪問不存在的控制器是會報錯,找不到相關類文件。因為我們缺少判斷相關類文件是否存在。因此,我們對Loader.php進行優化,首先掃描相關類文件是否存在,如果不存在則報錯。
<?php /** * Created by PhpStorm. * User: koastal * Date: 2016/5/15 * Time: 12:03 */ require_once 'config.php'; class Loader { public static function baseLoad() { require_once("Controller.php"); require_once("Model.php"); } public static function searchFile($filename,$path) { $filePath = false; $list = scandir($path); foreach($list as $file){ $realPath = $path.DIRECTORY_SEPARATOR.$file; if(is_dir($realPath) && $file!='.' && $file!='..'){ $res = Loader::searchFile($filename,$realPath); if($res){ return $res; } }elseif($file!='.' && $file!='..'){ if($file == $filename){ $filePath = $realPath; break; } } } return $filePath; } public static function autoload($class) { $filename = $class.".class.php"; $cflag = Loader::searchFile($filename,Controller_PATH); $mfalg = Loader::searchFile($filename,Model_PATH); $path = false; $path = ($cflag != false)? $cflag:$path; $path = ($mfalg != false)? $mfalg:$path; if($path == false){ exit("Class Load Failed."); }else{ require_once($path); } } } Loader::baseLoad(); spl_autoload_register(array('Loader', 'autoload'));
以上是“PHP MVC框架中類自動加載機制的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。