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

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. [转] Android利用Fiddler进行网络数据抓包

    主要介绍Android及IPhone手机上如何利用Fiddler进行网络数据抓包,比如我们想抓某个应用(微博.微信.墨迹天气)的网络通信请求就可以利用这个方法. Mac 下请使用 Charles 代替 ...

  2. git 删除分支如何恢复

    强制删除了一个分支而后又想重新使用这个分支,该怎么找回该分支上的代码呢? 一:问题描述: 今天师父说上线几个功能,让我把开发的分支推送到远程.当打开git就傻眼了,之前开发好的分支被我删除了,就连推送 ...

  3. Android(java)学习笔记206:JNI之工具快速开发步骤

    下面通过一个案例说明一下,利用工具jni快速开发步骤 1.新建一个Android工程,命名为"03_对int数组加1",如下: 2. 在MainActivity.java中对add ...

  4. Objective-C中copy 、retain以及ARC中新加入的strong、weak关键字的含义

    copy: 创建一个引用计数为1的对象,然后释放旧的对象 retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的引用计数为 1 Copy其实是建立了一个相同的对象,而retain不是: ...

  5. time模块,补上之前拉下的作业。

    time,时间模块比较重要,但不难学,主要是要学会转换时间格式.计算机的时间都是时间戳.人是看不懂的.写出时间转换的固定格式语句.import time   # 首先就是引入时间模块. time.ti ...

  6. 关于fragment+viewpager的优化

    上次写了一个问答项目,用的fragment+viewpager架构,后来发现,划了几次之后,再划回来,会重新加载布局,重新获取数据,这样整个程序和卡,并且占用太多的网络资源. 当时的解决办法是,自己重 ...

  7. 爬虫之BeautifulSoup库

    文档:https://beautifulsoup.readthedocs.io/zh_CN/latest/ 一.开始 解析库 # 安装解析库 pip3 install lxml pip3 instal ...

  8. CentOS 6 Yum本地源配置

    #cd /etc/yum.repos.d #rm CentOS-Base.repo CentOS-Base.repo 是yum 网络源的配置文件(默认) #vi CentOS-Media.repo C ...

  9. python virtualenv 虚拟环境的应用

    为什么要使用python的虚拟环境呢?: 首先我们来说不实用虚拟环境的情况: 在Python应用程序开发的过程中,系统安装的Python3只有一个版本:3.7.所有第三方的包都会被pip3安装到   ...

  10. OS X中crt中文乱码

    SecureCRT中显示乱码的话,可以去设置为UTF-8编码: Session Options->Terminal->Appearance->Character Encoding,设 ...