辛星 php,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,它的文件内容如下:

//定义它是从首页进入的

define('INDEX',True);

//包含该核心文件

define('__ROOT__',__DIR__);

include __ROOT__.'/star/star.php';

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

//定义版本信息

define("VERSION","0.1");

//控制PHP版本

if(phpversion()

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文件如下:

/**

*该类用于统一处理所有的信息

*

*/

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

$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函数用来对数组进行过滤,来防止非法注入,它的内容如下:

/**

*用于过滤用户输入信息的函数

*它主要是防止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还没有实际的意义,但是为了能够起到形式上的作用,我们定义如下:

/**

*该类用于解析url并且根据url来执行相关的方法

*

*/

if(!defined("STAR")) die("系统错误");

class Controller{

}7.截至目前,我们先写这些代码。

*****************辅助工作***************

1.为了测试运行,我们在app目录下的controller目录下新建了一个MyController.php,它有一个index方法,我们这里给定如下:

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.该版本可以作为我日后的回忆,哈哈。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值