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

WBOY
Release: 2016-06-13 12:02:45
Original
965 people have browsed it

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|
Copy after login
2.我们今天先写这个star.php文件,它是统一的入口文件,首先我们必须定义一个index.php,它的文件内容如下:

<?php //定义它是从首页进入的define(&#39;INDEX&#39;,True);//包含该核心文件define(&#39;__ROOT__&#39;,__DIR__);include __ROOT__.&#39;/star/star.php&#39;;
Copy after login

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();
Copy after login
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();		}			}	/**	*	*	*/	}
Copy after login
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;	}
Copy after login

6.我们的Controller还没有实际的意义,但是为了能够起到形式上的作用,我们定义如下:

<?php /***该类用于解析url并且根据url来执行相关的方法**/if(!defined("STAR")) die("系统错误");class Controller{	}
Copy after login
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);			}}
Copy after login
2.该版本目前运行正常,版本号记为0.0.1,代码我上传到csdn的下载的地方:
点击打开链接  ,当然是面积分下载的。

3.该版本可以作为我日后的回忆,哈哈。


Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template