PHP框架解析之从入口说起index.php

本文详细介绍了PHP框架的初始化过程,包括HTTP头设置、错误处理、文件路径获取、核心文件加载、单例模式使用、自动加载机制实现及插件注册等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    <?php
    header("Content-type:application/json;charset=utf-8");
    error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED ^ E_STRICT ^ E_WARNING);
    ini_set("display_errors", "On");

    define("ROOT_DIR", dirname(__FILE__));
    define("DS", DIRECTORY_SEPARATOR);
    define("CORE_DIR", ROOT_DIR . DS . 'framework');

    require_once ROOT_DIR . DS . 'stdafx.php';
    require_once CORE_DIR . DS . 'Core.php';

    try {
        $core = Core::getInstance()->boot(ROOT_DIR . '/config/core.php');//->run();
        $core->registerPlugin(new LoginPlugin());
        $core->run();
    } catch (Exception $ex) {
        echo json_encode(array('NOT FOUND'));
        print $ex;
        die;
    }

1、Http header设置Content-type
2、ini_set(“display_errors”, “On”)开启报错机制,error_reporting() 设置 PHP 的报错级别

常量描述
1E_ERROR致命的运行错误。错误无法恢复,暂停执行脚本。
2E_WARNING运行时警告(非致命性错误)。非致命的运行错误,脚本执行不会停止。
4E_PARSE编译时解析错误。解析错误只由分析器产生。
8E_NOTICE运行时提醒(这些经常是你代码中的bug引起的,也可能是有意的行为造成的。
16E_CORE_ERRORPHP启动时初始化过程中的致命错误。
32E_CORE_WARNINGPHP启动时初始化过程中的警告(非致命性错)。
64E_COMPILE_ERROR编译时致命性错。这就像由Zend脚本引擎生成了一个E_ERROR。
128E_COMPILE_WARNING编译时警告(非致命性错)。这就像由Zend脚本引擎生成了一个E_WARNING警告。
256E_USER_ERROR用户自定义的错误消息。这就像由使用PHP函数trigger_error(程序员设置E_ERROR)
512E_USER_WARNING用户自定义的警告消息。这就像由使用PHP函数trigger_error(程序员设定的一个E_WARNING警告)
1024E_USER_NOTICE用户自定义的提醒消息。这就像一个由使用PHP函数trigger_error(程序员一个E_NOTICE集)
2048E_STRICT编码标准化警告。允许PHP建议如何修改代码以确保最佳的互操作性向前兼容性。
4096E_RECOVERABLE_ERROR开捕致命错误。这就像一个E_ERROR,但可以通过用户定义的处理捕获
8191E_ALL所有的错误和警告(不包括 E_STRICT) (E_STRICT will be part of E_ALL as of PHP 6.0)


3、获取当前文件绝对路径 dirname(FILE)
4、引入文件stdafx.php和Core.php
stdafx.php主要作用是定义常量和引入相关php文件:

<?php
date_default_timezone_set("Asia/Chongqing");
define('CONFIG_DIR', ROOT_DIR . DS . 'config');
require_once CONFIG_DIR . '/db.php';
require_once CONFIG_DIR . '/mc.php';
...
require_once CONFIG_DIR . '/define.php';

Core.php是整个框架的核心:

  • include与require : 最大区别是当文件不是必需的,且应用程序在文件未找到时应该继续运行时可以使用include
  • _autoload与 spl_autoload_register:在php5之后可以在index.php中通过编写__autoload函数来让php自动加载类,也可以使用spl_autoload_register来注册我们自己的autoload函数来处理加载尚未定义的类
  • isset与empty:
    • isset:检测变量是否设置 ,若变量不存在则返回 FALSE 若变量存在且其值为NULL,也返回 FALSE
      若变量存在且值不为NULL,则返回 TURE ,同时检查多个变量时,每个单项都符合上一条要求时才返回 TRUE,否则结果为 FALSE.
    • empty:检查一个变量是否为空,若变量存在且其值为”“、0、”0”、NULL、、FALSE、array()、var $var; 以及没有任何属性的对象,则返回 TURE

5、Core::getInstance()单例模式实例化Core对象,初始化autoload加载机制(自定义loadClass),boot加载控制器、模型、视图,插件、库,路由规则等配置
6、注册LoginPlugin登录插件通过依赖注入的方式进行访问的身份验证检查
7、run根据路由规则分发机制以及path_info信息,解析出控制器类,实例化并调用IndexAction对请求进行处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值