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.该版本号能够作为我日后的回顾。哈哈。
2014年辛星starphp第一节设置入口文件以及App类的更多相关文章
- 2014年度辛星css教程夏季版第一节
CSS是Cascading Style Sheets的缩写,即层叠样式表,它用于表现HTML的样式,即HTML只是去写该网页有哪些内容,至于如何去表现它们,由CSS去定制. ************* ...
- 2014年辛星解读css第一节
CSS是Cascading Style Sheets的缩写.即层叠样式表,它用于表现HTML的样式,即HTML仅仅是去写该网页有哪些内容,至于怎样去表现它们,由CSS去定制. ************ ...
- 2014年辛星完全解读Javascript第一节
***************概述*************** 1.Javascript是一种原型化继承的基于对象的动态类型的脚本语言,它区分大小写,主要运行在客户端,用户即使响应用户的操作并进行数 ...
- 2014年度辛星css教程夏季版第六节
这一节我们就要讲到布局了,其实布局本身特别简单,但是要合理的布好局就不那么简单了,就像我们写文章一样,写一篇文章非常简单,但是要写一篇名著就很难了,这需要我们扎实的功底和对文学的理解,但是,千里之行, ...
- 2014年度辛星css教程夏季版第四节
接下来的这一节我计划讲解的是超链接和列表的样式,然后我们做出一个导航栏出来,其实导航栏是非常常见的,但是我们这里做得这个有点并不那么完善,等我们学完了css之后再完善它. ************** ...
- 2014年度辛星css教程夏季版第二节
第一节我们简介了一下CSS的工作流程,我相信读者会有一个大体的认识,那么接下来我们将会深入的研究一下CSS的细节问题,这些问题的涉及将会使我们的工作更加完善. *************注释***** ...
- 2014年度辛星解读css第四节
接下来的这一节我计划解说的是超链接和列表的样式,然后我们做出一个导航栏出来,事实上导航栏是很常见的,可是我们这里做得这个有点并不那么完好,等我们学完了css之后再完好它. ************** ...
- 2014年辛星解读css第二节
第一节我们简单介绍了一下CSS的工作流程,我相信读者会有一个大体的认识,那么接下来我们将会深入的研究一下CSS的细节问题,这些问题的涉及将会使我们的工作更加完好. *************凝视*** ...
- 2014年辛星解读css第六节
这一节我们就要讲到布局了,事实上布局本身特别简单.可是要合理的布好局就不那么简单了,就像我们写文章一样.写一篇文章非常easy,可是要写一篇名著就非常难了,这须要我们扎实的功底和对文学的理解,可是.千 ...
随机推荐
- Android Error:Unable to find method 'com.android.build.gradle.api.BaseVariant.getOutputs()Ljava/util/List;'.
问题:Error:Unable to find method 'com.android.build.gradle.api.BaseVariant.getOutputs()Ljava/util/List ...
- 百度人脸识别AI实践.doc
0, 前言 百度开放了很多AI能力,其中人脸识别就是其中之一. 本文对百度人脸识别AI进行实践检验,看看其使用效果如何. 鉴于是最为基础的实践,基本都是在其接口范例代码修改而来. 百度人脸识别AI网站 ...
- 模式匹配第四弹:if case,guard case,for case
2016-06-06 7388 作者:Olivier Halligon,原文链接,原文日期:2016-05-16 译者:walkingway:校对:Cee:定稿:numbbbbb 现在我们来重新回顾下 ...
- CAD设置系统变量(com接口VB语言)
主要用到函数说明: MxDrawXCustomFunction::Mx_SetSysVar 设置系统变量.详细说明如下: 参数 说明 CString sVarName 系统变量名 Value 需要设置 ...
- Android studio 开发一个用户登录界面
Android studio 开发一个用户登录界面 activity_main.xml <?xml version="1.0" encoding="utf-8&qu ...
- java string与byte互转
1.string 转 byte[]byte[] midbytes=isoString.getBytes("UTF8");//为UTF8编码byte[] isoret = srt2. ...
- Object.prototype 原型和原型链
Object.prototype 原型和原型链 原型 Javascript中所有的对象都是Object的实例,并继承Object.prototype的属性和方法,有些属性是隐藏的.换句话说,在对象创建 ...
- Vue.js 观察者(watch)
Vue.js 观察者(watch) watch 属性用于监视 vue 实例上的数据变动,并相应的改变其他变量的值. 用法 实例 1 <!DOCTYPE html> <html> ...
- Linux查看用户列表
cat /etc/passwd 可以查看所有用户的列表w 可以查看当前活跃的用户列表cat /etc/group 查看用户组 groups 查看当前登录用户的组内成员groups gliethttp ...
- LINUX-系统信息
系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...