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


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

    APP.php的这个类所在路径:根目录frameworkApp.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为钩子文件(什么叫钩子文件,说白了就是在程序的运行当中调用其他钩子的一个类)

  • 相关阅读:
    一个使用 Python 的人工智能聊天机器人框架
    【TensorFlow 官网 可以直接访问】让中国开发者更容易地使用TensorFlow打造人工智能应用
    Object Relational Tutorial 对象关系教程
    Automap sqlalchemy.ext.automap 自动映射数据库表结构
    回溯法
    子集树和排列树
    平衡树
    二叉查找树
    graphviz使用
    linux进程内存布局
  • 原文地址:https://www.cnblogs.com/cbw7172002/p/9894787.html
Copyright © 2020-2023  润新知