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,可是要写一篇名著就非常难了,这须要我们扎实的功底和对文学的理解,可是.千 ...
随机推荐
- css3 动画 vs js 动画
之前被问到过,css3 动画与 js 动画孰优孰劣,脑袋的第一反应就是性能上肯定 css3 动画会好很多,但别人说不对,我就在想,不对?难道还有别的原因吗?答案是肯定的.先来看看二者实现动画的原理吧. ...
- es6之Proxy,Reflect
Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写. var proxy = new Proxy(ta ...
- python与arduino串口通讯对接opencv实现智能物品分拣
2018-05-0118:53:50 先上图: 再来视频: http://v.youku.com/v_show/id_XMzU3NzAwNzMyNA==.html?spm=a2hzp.8244740. ...
- 如何取消android studio启动时自动打开上次关闭的项目
Androidstudio默认每次android studio启动就会自动打开上次关闭的项目,如果想要取消并让它显示此界面 只需要
- Python学习日记之运算符
- Hibernate+Spring整合开发步骤
Hibernate是一款ORM关系映射框架+Spring是结合第三方插件的大杂烩,Hibernate+Spring整合开发效率大大提升. 整合开发步骤如下: 第一步:导入架包: 1.Hibernate ...
- RocketMQ学习笔记(16)----RocketMQ搭建双主双从(异步复制)集群
1. 修改RocketMQ默认启动端口 由于只有两台机器,部署双主双从需要四个节点,所以只能修改rocketmq的默认启动端口,从官网下载rocketmq的source文件,解压后使用idea打开,全 ...
- Java编辑编译及运行环境
Java编辑编译及运行环境 Microsoft Windows 编辑工具 EditPlus JDK JDK(Java Development Kit,Java开发工具包)安装JDK之后,其中bin文件 ...
- NOIP2000方格取数(洛谷,动态规划递推)
先上题目: P1004 方格取数 下面上ac代码: ///如果先走第一个再走第二个不可控因素太多 #include<bits/stdc++.h> #define ll long long ...
- Number String(HDU 4055,动态规划递推,前缀和优化)
点击加号查看代码 #include<bits/stdc++.h>//前缀和优化版本,不易理解 using namespace std; #define ll long long ; ; l ...