zoukankan      html  css  js  c++  java
  • 2014年辛星starphp第一节设置入口文件以及App类

         

    *********************本节目标****************

    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方法,我们这里给定例如以下:

    <?php
    if(!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.该版本号能够作为我日后的回顾。哈哈。


  • 相关阅读:
    接口默认值引发Qt调用DLL异常
    360杀毒引发的DLL调用异常
    VS2012基于QT5.1自定接口及插件并实现动态加载
    Qt调用C的DLL
    Qt动态多语言的实现(VS2012开发)
    Qt在VS2012中引用QtWidgets时报GLES2/gl2.h无法打开错误的解决办法
    php判断某字符串是否不以数字或其他特殊字符开头
    mysql的数据类型int、bigint、smallint 和 tinyint取值范围
    28个jQuery性能优化的建议
    主题:iframe高度的自适应
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5225625.html
Copyright © 2011-2022 走看看