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

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系列教程——(二)使用Prism实现MVVM设计模式 - 简书

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

  5. CRL快速开发框架系列教程二(基于Lambda表达式查询)

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

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

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

  7. 黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (初级)

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

  8. webpack4 系列教程(二): 编译 ES6

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

  9. Shell脚本系列教程二: 开始Shell编程

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

随机推荐

  1. servlet两种配置方法详解

     1.web.xml中Servlet的注解 <servlet> <!-- servlet的内部名称,自定义 --> <servlet-name>DemoAction ...

  2. Kubernetes介绍及基本概念

    kubernetes介绍 Kubernetes是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernetes也叫K8S.K8S是Google内部一个叫Borg的容器集 ...

  3. linux逻辑卷管理(LVM)

    1. 逻辑卷(LVM)的原理 LVM(Logical Volume Manager)逻辑卷管理 是在物理磁盘和文件系统的之间添加一个逻辑层,通过对底层物理磁盘的封装,以逻辑卷的方式呈现给上层应用,通过 ...

  4. CDI Features(EL(SPEL),Decorator,Interceptor,Producer)

    一.EL(SPEL) EL 1.概述:EL是JSP内置的表达式语言,用以访问页面的上下文以及不同作用域中的对象 ,取得对象属性的值,或执行简单的运算或判断操作.EL在得到某个数据时,会自动进行数据类型 ...

  5. _proto_理解

    一个对象就是一个属性集合,并拥有一个独立的prototype(原型)对象.这个prototype可以是一个对象或 者null. 一个对象的prototype是以内部的[[Prototype]]属性来引 ...

  6. python--网络编程requests

    一.requests 之前使用python自带的urllib模块去请求一个网站或者接口,但是urllib模块太麻烦了,传参数的话,都得是bytes类型,返回数据也是bytes类型,还得解码,想把返回结 ...

  7. .NET Core和Swagger 生成 Api 文档转

    阅读目录 1.引用 2.打开startup.cs文件 3.设置XML注释 4.运行结果 5.主要问题的解决办法 6.可以自定义UI 前言 最近写了好多Web api, 老大说太乱了,要整理一下,使用S ...

  8. 【调试基础】Part 5 PE格式

    PE概念.区块分类

  9. 在电脑端同时安装Python2,Python3

    参考文档:http://www.cnblogs.com/zhengyihan1216/p/6011640.html 重点: 1.安装路径最好在一起,方便管理 2.安装路径下不建议有空格 3.Pytho ...

  10. ubuntu 系统开机执行脚本设置

    在ubuntu 系统中常常有一些操作需要开机时手动去执行,有一些固定的脚本文件可以通过改写启动项脚本让系统启动时自动执行 方法: 编辑/etc/下的rc.local脚本,把对应的需要执行的脚本写在ex ...