2014年辛星starphp第一節設定入口檔案以及App類

來源:互聯網
上載者:User

標籤:辛星   php   starphp   架構   教程   

     

*********************本節目標****************

1.首先是我們的架構大致布局,我們即將寫成的這個架構,它的入口檔案統一為star.php,它需要做的一些事,比如載入配置項,記錄檔什麼的日後再說,首先確定一下它的目錄結構,它的目錄結構是如下的樣子:

|---------star|   |------------core:核心類庫|   |     |---------------app.php|   |     |---------------model.php|   |     |---------------controller.php|   |     |----------------view.php|   |     |-----------------fun.php|   ||   |-------------common:函數庫|   |-------------class:類庫|   |-------------extends:其他類庫|   |--------------star.php||-----------app它的檔案目錄為|   |------------遵循模組/控制器/方法的格式|   |------------index.php||------------adimin|
2.我們今天先寫這個star.php檔案,它是統一的入口檔案,首先我們必須定義一個index.php,它的檔案內容如下:

<?php //定義它是從首頁進入的define('INDEX',True);//包含該核心檔案define('__ROOT__',__DIR__);include __ROOT__.'/star/star.php';

3.然後我們書寫star.php的內容,它能夠引導找到App類,並且調用App類的run方法來使程式運行下去,它的代碼:

<?php//定義版本資訊define("VERSION","0.1");//控制PHP版本if(phpversion() <'5.3'){exit("版本太低不支援");} //表示路徑分隔字元define("DS",DIRECTORY_SEPARATOR);//這個STAR表示我們的star目錄if(!defined("STAR")){define("STAR",__DIR__);}//定義應用程式目錄,if(! defined("APP")){define("APP",__ROOT__.DS."app");}if(! defined("CORE")){define("CORE",STAR.DS."core");}//匯入應用程式控制檔案  include STAR.DS."core".DS."app.php";//匯入核心檔案include CORE.DS."fun.php";$app = new  App();$app->run();
4.然後我們寫這個App類,它應該能夠完成對URL的解析,這裡我們還沒有設定設定檔,因此我們的URL統一使用PATHINFO模式,而且路徑分隔字元統一用斜線,而且我們的url的檔案名稱的後部分是按照”模組/控制器/方法/參數1/值1/參數2/值2...."的方式去寫的,因此,我們的app.php檔案如下:

<?php/***該類用於統一處理所有的資訊**/if(!defined("STAR")) die("系統錯誤");include STAR.DS."core".DS."controller.php";class App{//模組名private $module = "";//控制器private $controller = "";//方法名private $method = "";//參數名private $param = array();//參數個數private $paramlength = 0;/***用於解析控制器和方法**/public function __construct(){//預設使用/來解析url$path  = trim($_SERVER['PATH_INFO'],'/');$path = explode('/',$path);var_dump($path);$paramlength =(count($path) - 3)/2;var_dump($paramlength);$this->paramlength = $paramlength;$module  = array_shift($path);//模組名$controller = array_shift($path);//控制器名$method = array_shift($path);//方法名var_dump($path);for($i = 0;$i <$paramlength;$i++){$param[] = $path[2*$i + 1];}var_dump($param);$param = star_arr_safe($param);var_dump($param);$this->param = $param;if($module ==""){$module = "index";}if($controller == ""){$controller = "Index";}if($method == ""){$method = "index";}$this->module = $module;$this->controller = $controller;$this->method = $method;//spl_autoload_register($this->loadcore);//自動根據解析的路由來執行}/***用於運行方法**/public function run(){$controller = $this->controller;$module = $this->module;$dir = APP.DS.$module.DS."controller".DS."$controller"."Controller.php";include "$dir";$controllerclass = $controller."Controller";$class = new $controllerclass();$method = $this->method;$param = $this->param;$length = $this->paramlength;if(is_int($length) && ($length >= 1)){$class->$method($param);}else{$class->$method();}}/*****/}
5.我們還需要在core檔案夾的fun.php檔案中添加一些代碼,它有一個star_arr_safe函數用來對數組進行過濾,來防止非法注入,它的內容如下:

<?php/***用於過濾使用者輸入資訊的函數*它主要是防止sql注入*也需要防範html實體*/function star_arr_safe($array){if(is_array($array)){$count = count($array);for($i = 0;$i< $count;$i ++){$array[$i] = htmlspecialchars($array[$i]);$array[$i] = addslashes($array[$i]);}}return $array;}

6.我們的Controller還沒有實際的意義,但是為了能夠起到形式上的作用,我們定義如下:

<?php/***該類用於解析url並且根據url來執行相關的方法**/if(!defined("STAR")) die("系統錯誤");class Controller{}
7.截至目前,我們先寫這些代碼。



*****************輔助工作***************

1.為了測試回合,我們在app目錄下的controller目錄下建立了一個MyController.php,它有一個index方法,我們這裡給定如下:

<?phpif(!defined("STAR")) exit("Not Allowed");class MyController extends Controller{public function index($arr){echo "hello world";var_dump($arr);}}
2.該版本目前運行正常,版本號碼記為0.0.1,代碼我上傳到csdn的下載的地方:
點擊開啟連結  ,當然是面積分下載的。

3.該版本可以作為我日後的回憶,哈哈。


2014年辛星starphp第一節設定入口檔案以及App類

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.