二零一四年辛星starphp第一节设置入口文件以及App类

WBOY
发布: 2016-06-13 12:02:45
原创
964 人浏览过

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(&#39;INDEX&#39;,True);//包含该核心文件define(&#39;__ROOT__&#39;,__DIR__);include __ROOT__.&#39;/star/star.php&#39;;
登录后复制

3.然后我们书写star.php的内容,它能够引导找到App类,并且调用App类的run方法来使程序运行下去,它的代码:

<?php //定义版本信息define("VERSION","0.1");//控制PHP版本if(phpversion() <&#39;5.3&#39;){	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[&#39;PATH_INFO&#39;],&#39;/&#39;);		$path = explode(&#39;/&#39;,$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 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.该版本可以作为我日后的回忆,哈哈。


相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板