*********************本节目标****************

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类的更多相关文章

  1. 2014年度辛星css教程夏季版第一节

    CSS是Cascading Style Sheets的缩写,即层叠样式表,它用于表现HTML的样式,即HTML只是去写该网页有哪些内容,至于如何去表现它们,由CSS去定制. ************* ...

  2. 2014年辛星解读css第一节

    CSS是Cascading Style Sheets的缩写.即层叠样式表,它用于表现HTML的样式,即HTML仅仅是去写该网页有哪些内容,至于怎样去表现它们,由CSS去定制. ************ ...

  3. 2014年辛星完全解读Javascript第一节

    ***************概述*************** 1.Javascript是一种原型化继承的基于对象的动态类型的脚本语言,它区分大小写,主要运行在客户端,用户即使响应用户的操作并进行数 ...

  4. 2014年度辛星css教程夏季版第六节

    这一节我们就要讲到布局了,其实布局本身特别简单,但是要合理的布好局就不那么简单了,就像我们写文章一样,写一篇文章非常简单,但是要写一篇名著就很难了,这需要我们扎实的功底和对文学的理解,但是,千里之行, ...

  5. 2014年度辛星css教程夏季版第四节

    接下来的这一节我计划讲解的是超链接和列表的样式,然后我们做出一个导航栏出来,其实导航栏是非常常见的,但是我们这里做得这个有点并不那么完善,等我们学完了css之后再完善它. ************** ...

  6. 2014年度辛星css教程夏季版第二节

    第一节我们简介了一下CSS的工作流程,我相信读者会有一个大体的认识,那么接下来我们将会深入的研究一下CSS的细节问题,这些问题的涉及将会使我们的工作更加完善. *************注释***** ...

  7. 2014年度辛星解读css第四节

    接下来的这一节我计划解说的是超链接和列表的样式,然后我们做出一个导航栏出来,事实上导航栏是很常见的,可是我们这里做得这个有点并不那么完好,等我们学完了css之后再完好它. ************** ...

  8. 2014年辛星解读css第二节

    第一节我们简单介绍了一下CSS的工作流程,我相信读者会有一个大体的认识,那么接下来我们将会深入的研究一下CSS的细节问题,这些问题的涉及将会使我们的工作更加完好. *************凝视*** ...

  9. 2014年辛星解读css第六节

    这一节我们就要讲到布局了,事实上布局本身特别简单.可是要合理的布好局就不那么简单了,就像我们写文章一样.写一篇文章非常easy,可是要写一篇名著就非常难了,这须要我们扎实的功底和对文学的理解,可是.千 ...

随机推荐

  1. vue学习总结(简单介绍)

    声明式渲染 Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统: <div id="app"> {{ message }} < ...

  2. RabbitMQ系列(五)--高级特性

    在上一篇文章讲解MQ消息可靠性投递和幂等性中有提到confirm机制的重要性,现在更相信的说明一下 一.Confirm机制 Confirm就是消息确认,当Producer发送消息,如果Broker收到 ...

  3. spring aop 内部调用问题解决

    方法1: 基于 proxy 的 spring aop 带来的内部调用问题可以使用 AopContext.currentProxy() 强转为当前的再调用就可以解决了 例如: 错误用法:public A ...

  4. 了解固态硬盘SSD,竟然如此简单!小白也能懂!

    https://www.youtube.com/watch?v=alb6-zp52mA

  5. BeanFactory和ApplicationContext

    BeanFactory是一个类的通用工厂,可以创建并管理各种类的对象 Bean工厂是Spring框架最核心的接口,它提供了高级Ioc的配置机制.BeanFeactory使管理不同类的Java对象成为可 ...

  6. 去重 取最大的一条sql

    select T.BILL_CODE,t.SCAN_TYPE,t.PIECE,SCAN_SITE,SCAN_MAN, row_number() over(partition by t.bill_cod ...

  7. 解决移动端 footer fixd 定位被键盘顶起来的方案

    直接上代码: $(document).ready(function () { var u = navigator.userAgent; var isAndroid = u.indexOf('Andro ...

  8. JavaScript--小白入门篇3

    一.函数 1.1 初步认识函数 1 <script type="text/javascript"> 2 console.log("你好"); 3 s ...

  9. Loj #6000.「 网络流 24 题 」搭配飞行员

    解题思路 考虑如何建模. 既然是网络流,那么肯定要有源点和汇点.而这个题目并没有什么明显的源点和汇点. 想一想,如果一个飞机能够起飞的话,那么必定有一对可以配对的正副驾驶员.也就是说一条曾广路能够上必 ...

  10. ROS lesson 1

    ROS ROS官网 ROS 简介 ROS 是 Robot Operation System 的简写,并且 他诞生在2000年后,至今有10余年了,运行在 Linux(Ubuntu) 上 ROS 不是 ...