class Framework{ //在建構方法中初始化 public function __construct() { $this->autoload(); public function autoload() { //說明:如果一個函數的參數是回呼函數,就直接寫函數的名字 //如果函數的參數是一個物件的方法的話,則需要傳遞陣列進去,參數1:物件;物件的方法 spl_autoload_register(array($this,"autoloader")); spl_autoload_register(array($this,"autoloader")); } //自動載入執行的函式;'; / /針對第三者的類,做一個特例處理 if($className=='Smarty'){ require_once './framework/vendor/smarty/Smarty.class.php'; //1. 先將帶有命名空間的類,分隔開 $arr = explode('\\', $className); //2. 根據第一個元素決定載入的根目錄 if($arr[0] == ' $basic_path = './'; }else{ $basic_path = './application/'; } '/', $className ); //4. 確定檔名 //確定後綴:類別檔案的後綴:.class.php,介面檔案的後綴是:.interface.php if(substr($arr[count($arr)-1], 0,2)=='I_'){ //說明是介面檔 $fix = '.interface.php' $fix = '.interface.php' .class.php'; }$class_file = $basic_path.$sub_path.$fix; //5. 載入類別 //如果不是依照我們的命名空間的規則定義的,說明不是我們需要載入的類別,就不用載入 { require_once $class_file; } } //確定mca public function in $m = isset($_GET['m'])?$_GET['m']:'home'; define('MODULE', $m); // 存取哪個控制器 90,000 $ 'c'])?$_GET['c']:'Index'; define('CONTROLLER', $c); //存取控制器的哪一個動作使用 $ $_GET['a']:'indexAction'; define('ACTION', $a); } //實例化對象,呼叫方式 public function dispatch() //實例化對象,呼叫方式 public function dispatch() //實例化對象,請使用方式 public function dispatch() //實例化。 .'Controller'; //先載入控制器類,再實例化物件 $controller = new $controller_name; controller -> $a(); }}