从零开始写自己的PHP框架系列教程(二)[App.php]

时间:2022-09-09 15:53:23

从这一个文件开始以后加载的均以类加载,请注意命名空间和所在文件的路径

APP.php的这个类所在路径:根目录\framework\App.php

直接上代码

namespace framework;

class App {

    /**
* 初始化配置
* @Author yiwanxifan
*/
static protected function init() {
Config::init( ROOT_PATH );
Config::loadConfig( CONFIG_PATH . 'global.php' );
Config::loadConfig( CONFIG_PATH . Config::get('ENV') . '.php' );
date_default_timezone_set( Config::get('TIMEZONE') ); //error display
if ( Config::get('DEBUG') ) {
ini_set("display_errors", 1);
error_reporting( E_ALL ^ E_NOTICE );
} else {
ini_set("display_errors", 0);
error_reporting(0);
} include_once ROOT_PATH.'data/version.php'; } /**
* 运行框架
* @Author yiwanxifan
*/
static public function run() {
try{
self::init();
Hook::init(ROOT_PATH);
Hook::listen('appBegin'); Hook::listen('routeParseUrl', array( Config::get('REWRITE_RULE'), Config::get('REWRITE_ON'))); //默认路由设置
if( !defined('APP_NAME') || !defined('CONTROLLER_NAME') || !defined('ACTION_NAME')){
Route::parseUrl( Config::get('REWRITE_RULE'), Config::get('REWRITE_ON') );
}
$controller = '\app\\'. APP_NAME .'\\'. CONTROLLER_NAME;$action = ACTION_NAME; if( !class_exists($controller) ) {
throw new \Exception("Controller '{$controller}' not found", 404);
}
$obj = new $controller();
if( !method_exists($obj, $action) ){
throw new \Exception("Action '{$controller}::{$action}()' not found", 404);
} Hook::listen('actionBefore', array($obj, $action));
$obj ->$action();
Hook::listen('actionAfter', array($obj, $action)); } catch(\Exception $e){
Hook::listen('appError', array($e));
} Hook::listen('appEnd');
} }

代码里面的Config.php和Hook.php跟App.php 在同一个目录

Config.php为配置文件

Hook.php为钩子文件(什么叫钩子文件,说白了就是在程序的运行当中调用其他钩子的一个类)

从零开始写自己的PHP框架系列教程(二)[App.php]的更多相关文章

  1. 从零开始写自己的PHP框架系列教程[前言]

    我觉得程序员进步的理由:多看->多写->多总结 我自我介绍下,我不是程序员,但是我爱编程,作为业余程序员自己写框架让人感到兴奋的,目前有很多框架(js有jQuery.Express.soc ...

  2. 从零开始写自己的PHP框架系列教程(一)[core.php]

    这里我直接上代码: /** * 框架核心 */ if (version_compare(PHP_VERSION, '5.3.0','<')) { header("Content-Typ ...

  3. 老周的ABP框架系列教程 -》 一、框架理论初步学习

    老周的ABP框架系列教程 -- 一.框架理论初步学习   1. ABP框架的来源与作用简介 1.1  简介 1.1.1       ABP框架全称为"ASP.NET Boilerplate ...

  4. WPF系列教程——&lpar;二&rpar;使用Prism实现MVVM设计模式 - 简书

    原文:WPF系列教程--(二)使用Prism实现MVVM设计模式 - 简书 本文假设你已经知道MVVM设计模式是什么,所以直接进入正题,今天我们就用Prism来实现WPF的MVVM设计模式,百度上关于 ...

  5. CRL快速开发框架系列教程二&lpar;基于Lambda表达式查询&rpar;

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  6. C&num;微信公众号开发系列教程二(新手接入指南)

    http://www.cnblogs.com/zskbll/p/4093954.html 此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可 ...

  7. 黄聪:Microsoft Enterprise Library 5&period;0 系列教程&lpar;二&rpar; Cryptography Application Block &lpar;初级&rpar;

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (初级) 企业库加密应用程序模块提供了2种方 ...

  8. webpack4 系列教程&lpar;二&rpar;&colon; 编译 ES6

    今天介绍webpack怎么编译ES6的各种函数和语法.敲黑板:这是webpack4版本哦, 有一些不同于webpack3的地方. >>> 本节课源码 >>> 所有课 ...

  9. Shell脚本系列教程二&colon; 开始Shell编程

    Shell脚本系列教程二: 开始Shell编程 2.1 如何写shell script? (1) 最常用的是使用vi或者mcedit来编写shell脚本, 但是你也可以使用任何你喜欢的编辑器; (2) ...

随机推荐

  1. 再谈SQL Server中日志的的作用

    简介     之前我已经写了一个关于SQL Server日志的简单系列文章.本篇文章会进一步挖掘日志背后的一些概念,原理以及作用.如果您没有看过我之前的文章,请参阅:     浅谈SQL Server ...

  2. org&period;apache&period;catalina&period;webresources&period;Cache&period;getResource Unable to add the resource

    org.apache.catalina.webresources.Cache.getResource Unable to add the resource at xxx to the cache be ...

  3. Java 中的转义字符

    注意斜杠方向,为键盘右上角的斜杠 \t 在当前编辑位置插入一个 tab \b 在当前编辑位置插入一个空格 \n 换行(在当前编辑位置插入 a newline) \r 在当前编辑位置插入一个回车     ...

  4. request 获取请求参数

    /** * 根据request获取请求的用户参数 * @return * @return */ protected <T> T getParamConvertEntity(Class cl ...

  5. html &plus; css &plus; js注释规范

    添加注释到代码中,是一个很好的习惯,而且极大的提高了代码的可读性 1.HTML <!--commentContent--> 2.CSS //commentContent /*comment ...

  6. Nginx安装配置PHP(FastCGI)环境的教程

    这篇是Nginx安装配置PHP(FastCGI)环境的教程.Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用. 一.什么是 FastCGI F ...

  7. bootcamp分区&lowbar;BOOTCAMP 删除分区失败

    mac 装了双系统,Mac OS X 分配的内存太少了,导致使用卡顿,要删掉windows系统. 在删除windows的时候出现  “您的磁盘不能恢复为单一的分区” 解决方案: 1.重启Mac,并按下 ...

  8. springboot nginx 配置

    安装nginx参考本人另一篇博客:http://www.cnblogs.com/gmq-sh/p/5750833.html spring-boot需要启动nginx的,用于监听启动的端口.一.配置ng ...

  9. python--第九天总结

    python 多进程和多线程 多线程可以共享全局变量,多进程不能.多线程中,所有子线程的进程号相同:多进程中,不同的子进程进程号不同. [多进程] Python在2.6引入了多进程的机制,并提供了丰富 ...

  10. Jmeter远程测试

    11.3 详解JMeter远程测试(1) 2012-04-09 09:14 温素剑 电子工业出版社 字号:T | T 综合评级: 想读(7)  在读(2)  已读(0)   品书斋鉴(0)   已有9 ...