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

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.该版本号能够作为我日后的回顾。哈哈。

转载于:https://www.cnblogs.com/gcczhongduan/p/5225625.html

2014年辛星starphp第一节设置入口文件以及App类相关推荐

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

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

  2. 零积分下载,2014年辛星mysql教程秋季版第一本已经完工,期待您的支持

    经过一段时间的不懈努力.终于,2014年辛星mysql教程秋季版的第一本,即夯实基础已经完工,在csdn的下载地址为:去下载地址 ,假设左边地址跪了,能够去http://download.csdn.n ...

  3. 2014年辛星jquery解读第一节

    ***************简介***************** 1.jQuery是一个Javascript库,而且很容易学习,功能也很强大. 2.jquery诞生自2006年1月,至今已经有八年 ...

  4. 2014年辛星jquery解读第二节

    *************jquery的语法****************** 1.jquery是通过选取HTML元素,并且对选取的元素执行某些操作,从而完成某些特效的. 2.因此,我们在使用jQu ...

  5. 2014百度之星初赛第一轮解题报告:information

    Information 时间限制: 1s 内存限制: 65536K 问题描述 军情紧急,我们需要立刻开发出一个程序去处理前线侦察兵发回的情报,并做出相应的分析.现在由你负责其中的一个子模块,你需要根据 ...

  6. 2014百度之星资格赛第一题

    Energy Conversion Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  7. 2014 百度之星 资格赛 第一题 Energy Conversion 解题思路

    本次比赛的资格赛似乎比以往来的要稍微难一点,但是整体来说,每道题想到解题思路都不是很难,但是在具体的代码编写过程中需要注意的细节尤为重要.下面先将第一题的题目贴出: [Time Limit: 2000 ...

  8. (王道408考研操作系统)第四章文件管理-第一节5:文件存储空间管理

    文章目录 一:空闲表法 (1)定义 (2)如何分配磁盘块 (3)如何回收磁盘块 二:空闲链表法 (1)空闲盘块链的分配和回收 (2)空闲盘区链的分配和回收 三:位示图法 (1)定义 (2)如何分配磁盘 ...

  9. (王道408考研操作系统)第四章文件管理-第一节6:文件基本操作

    文章目录 一:创建文件(create系统调用) 二:删除文件(delete系统调用) 三:打开文件(open系统调用) 四:关闭文件(close系统调用) 五:读文件(read系统调用) 六:写文件( ...

  10. (王道408考研操作系统)第四章文件管理-第一节4:文件物理结构(文件分配方式)

    文章目录 一:连续分配 二:链接分配 A:隐式链接 B:显式链接 三:索引分配 (1)基本概念 (2)一个问题 A:链接方案 B:多层索引 C:混合索引 文件分配方式大总结 文件的物理结构是指如何为文 ...

最新文章

  1. AttributeError: module ‘sys‘ has no attribute ‘maxint‘
  2. NET(C#):使用HttpWebRequest头中的Range下载文件片段
  3. 微信小程序实战–集阅读与电影于一体的小程序项目(六)
  4. DB9公母头引脚定义
  5. Windows Azure Storage论文解读
  6. 没事随便写写——matlab图像与矩阵的转换与存储为txt文件
  7. linux密文解密工具,Linux之加密解密工具openssl的用法以及自建CA
  8. 第3課 ここはデパートです
  9. 理解eos区块链的eosio.token合约
  10. 引用网易等相册的图片出现防盗链怎么办呢?看这里就迎刃而解!(转贴)
  11. 一步步实现koa核心代码
  12. webpack配置babel-loader
  13. 让程序员崩溃只需要一句话
  14. 运行成功:char转换为wchar_t的代码
  15. drawboard pdf拆分文件_Drawboard PDF 免费版
  16. 数控g71编程实例带图_数控车床g71编程实例带图 表面速度130m/min主轴
  17. N1盒子安装 aria2(带AriaNg前端)
  18. 刷脸支付:5G时代下的新型支付模式
  19. 《尚硅谷30天入门Java》学习笔记1
  20. java word 加密_Java 加密Word文档

热门文章

  1. 正则表达式学习(一)
  2. Transformer+self-attention超详解(亦个人心得)
  3. 【EI 快速检索 | 九月特邀】经济与计算机多主题国际会议
  4. 算法在岗3年小结:模型策略篇
  5. 【SCIR AAAI2021】数据增强没效果?试试用Cluster-to-Cluster生成更多样化的新数据吧...
  6. 【每日算法Day 79】所有人都会做的入门题,但是能看出你的代码能力!
  7. 《神经网络与深度学习》课程笔记(3)-- 神经网络基础之Python与向量化
  8. numpy - np.where
  9. 深度学习2.0-11.tensorflow的高阶操作之高阶op
  10. 深度学习10-tf.data-数据输入管道简介