//PrivilegeAction.class.php
<code>//判断常量是否定义,如果没有定义,意味着不是请求的index.php if(!defined('ACCESS'))exit; //初始化类 class Application{ //1. 初始化字符集 private static function setHeader(){ echo __METHOD__."<br>"; header('Content-type:text/html;charset=utf-8'); } //2. 初始化系统常量 private static function setConst(){ echo __METHOD__."<br>"; //设置根目录常量 define('ROOT_DIR',str_replace('/Core','',str_replace('\\','/',__DIR__))); //定义其他目录 define('CORE_DIR', ROOT_DIR . '/Core'); define('ACTION_DIR', ROOT_DIR . '/Action'); define('CONF_DIR', ROOT_DIR . '/Conf'); define('MODEL_DIR', ROOT_DIR . '/Model'); define('VIEW_DIR', ROOT_DIR . '/View'); define('PUB_DIR', ROOT_DIR . '/Public'); } //3. 错误信息 private static function setErrors(){ echo __METHOD__."<br>"; //开发环境下,显示错误,显示所有级别的错误 //生产环境下,不显示错误,隐藏所有的级别的错误(系统要做好容错处理) @ini_set('error_reporting', 1); @ini_set('display_errors', 1); } //4. 自动加载 //4.1 加载控制器类 public static function loadAction($class){ echo __METHOD__."<br>"; //判断 if(is_file(ACTION_DIR . "/$class.class.php")){ include_once ACTION_DIR . "/$class.class.php"; } } //4.2 加载核心类 public static function loadCore($class){ echo __METHOD__."<br>"; //判断 if(is_file(CORE_DIR . "/$class.class.php")){ include_once CORE_DIR . "/$class.class.php"; } } //4.3 加载模型类 public static function loadModel($class){ echo __METHOD__."<br>"; //判断 if(is_file(MODEL_DIR . "/$class.class.php")){ include_once MODEL_DIR . "/$class.class.php"; } } //将所有的自动加载方法注册到自动加载机制中 private static function setAutoload(){ echo __METHOD__."<br>"; spl_autoload_register(array('Application','loadCore')); spl_autoload_register(array('Application','loadAction')); //系统会判断当前提供的参数是一个函数(字符串)还是一个数组 //如果是一个数组:1.找到数组的第一个参数,判断该参数,如果参数不是一个对象,系统会认为该字符串是一个类名,所以在拼凑访问的时候,会用范围解析操作符去访问第二个参数 //Application::loadCore(); spl_autoload_register(array('Application','loadModel')); } //5. 开启session机制 private static function setSession(){ echo __METHOD__."<br>"; //开启session @session_start(); } //6. 加载配置文件 private static function setConfig(){ echo __METHOD__."<br>"; $GLOBALS['config'] = include_once CONF_DIR . '/config.php'; } //7. URL初始化 private static function setUrl(){ echo __METHOD__."<br>"; //获取用户的url信息(GET方式提交的数据) //module:请求的模块(控制器) $module = isset($_REQUEST['module']) ? $_REQUEST['module'] : 'privilege'; //action:请求的方法 $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'login'; </code>
<code> //处理字符串 //1. 全部转小写 $module = strtolower($module); $action = strtolower($action); //2. 类的首字母大写,方法不需要 $module = ucfirst($module); //将获取到的数据定义成常量用于后面的方法使用 局部变量后面是不能用的 define('MODULE',$module); define('ACTION',$action); } //8. 权限验证 private static function setPrivilege(){ echo __METHOD__."<br>"; //放行一些不需要验证的控制器的方法 if(!(MODULE == 'Privilege' && (ACTION == 'login' || ACTION == 'signin' || ACTION == 'captcha'))){ //都是需要验证 if(!isset($_SESSION['user'])){ //用户没有登录 header('Location:index.php'); } } } //9. 分发 private static function setDispatch(){ echo __METHOD__; //找对对应的控制器类,实例化,再调用对应的方法即可 $module = MODULE . 'Action'; //得到控制器名字 $module = new $module(); //创建控制器对象 $action = ACTION; $module->$action(); //调用控制器中的方法 } </code>
<code> //初始化方法 public static function run(){ //初始化项目 //1.初始化字符集 self::setHeader(); //2.初始化系统常量 self::setConst(); //3.错误信息 self::setErrors(); //4.自动加载 self::setAutoload(); //5.session开启 self::setSession(); //6.配置文件 self::setConfig(); //7.URL初始化 self::setUrl(); //8.权限验证 self::setPrivilege(); //9.分发 self::setDispatch(); } } </code>
//indexphp
<code>//定义一个常量,用于其他文件的判断 //入口文件常量 define('ACCESS','ACC'); //加载初始化类Application.class.php include_once 'Core/Application.class.php'; //调用系统初始化方法 //调用Application类的静态方法 Application::run();</code>
回复内容:
//PrivilegeAction.class.php
<code>//判断常量是否定义,如果没有定义,意味着不是请求的index.php if(!defined('ACCESS'))exit; //初始化类 class Application{ //1. 初始化字符集 private static function setHeader(){ echo __METHOD__."<br>"; header('Content-type:text/html;charset=utf-8'); } //2. 初始化系统常量 private static function setConst(){ echo __METHOD__."<br>"; //设置根目录常量 define('ROOT_DIR',str_replace('/Core','',str_replace('\\','/',__DIR__))); //定义其他目录 define('CORE_DIR', ROOT_DIR . '/Core'); define('ACTION_DIR', ROOT_DIR . '/Action'); define('CONF_DIR', ROOT_DIR . '/Conf'); define('MODEL_DIR', ROOT_DIR . '/Model'); define('VIEW_DIR', ROOT_DIR . '/View'); define('PUB_DIR', ROOT_DIR . '/Public'); } //3. 错误信息 private static function setErrors(){ echo __METHOD__."<br>"; //开发环境下,显示错误,显示所有级别的错误 //生产环境下,不显示错误,隐藏所有的级别的错误(系统要做好容错处理) @ini_set('error_reporting', 1); @ini_set('display_errors', 1); } //4. 自动加载 //4.1 加载控制器类 public static function loadAction($class){ echo __METHOD__."<br>"; //判断 if(is_file(ACTION_DIR . "/$class.class.php")){ include_once ACTION_DIR . "/$class.class.php"; } } //4.2 加载核心类 public static function loadCore($class){ echo __METHOD__."<br>"; //判断 if(is_file(CORE_DIR . "/$class.class.php")){ include_once CORE_DIR . "/$class.class.php"; } } //4.3 加载模型类 public static function loadModel($class){ echo __METHOD__."<br>"; //判断 if(is_file(MODEL_DIR . "/$class.class.php")){ include_once MODEL_DIR . "/$class.class.php"; } } //将所有的自动加载方法注册到自动加载机制中 private static function setAutoload(){ echo __METHOD__."<br>"; spl_autoload_register(array('Application','loadCore')); spl_autoload_register(array('Application','loadAction')); //系统会判断当前提供的参数是一个函数(字符串)还是一个数组 //如果是一个数组:1.找到数组的第一个参数,判断该参数,如果参数不是一个对象,系统会认为该字符串是一个类名,所以在拼凑访问的时候,会用范围解析操作符去访问第二个参数 //Application::loadCore(); spl_autoload_register(array('Application','loadModel')); } //5. 开启session机制 private static function setSession(){ echo __METHOD__."<br>"; //开启session @session_start(); } //6. 加载配置文件 private static function setConfig(){ echo __METHOD__."<br>"; $GLOBALS['config'] = include_once CONF_DIR . '/config.php'; } //7. URL初始化 private static function setUrl(){ echo __METHOD__."<br>"; //获取用户的url信息(GET方式提交的数据) //module:请求的模块(控制器) $module = isset($_REQUEST['module']) ? $_REQUEST['module'] : 'privilege'; //action:请求的方法 $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'login'; </code>
<code> //处理字符串 //1. 全部转小写 $module = strtolower($module); $action = strtolower($action); //2. 类的首字母大写,方法不需要 $module = ucfirst($module); //将获取到的数据定义成常量用于后面的方法使用 局部变量后面是不能用的 define('MODULE',$module); define('ACTION',$action); } //8. 权限验证 private static function setPrivilege(){ echo __METHOD__."<br>"; //放行一些不需要验证的控制器的方法 if(!(MODULE == 'Privilege' && (ACTION == 'login' || ACTION == 'signin' || ACTION == 'captcha'))){ //都是需要验证 if(!isset($_SESSION['user'])){ //用户没有登录 header('Location:index.php'); } } } //9. 分发 private static function setDispatch(){ echo __METHOD__; //找对对应的控制器类,实例化,再调用对应的方法即可 $module = MODULE . 'Action'; //得到控制器名字 $module = new $module(); //创建控制器对象 $action = ACTION; $module->$action(); //调用控制器中的方法 } </code>
<code> //初始化方法 public static function run(){ //初始化项目 //1.初始化字符集 self::setHeader(); //2.初始化系统常量 self::setConst(); //3.错误信息 self::setErrors(); //4.自动加载 self::setAutoload(); //5.session开启 self::setSession(); //6.配置文件 self::setConfig(); //7.URL初始化 self::setUrl(); //8.权限验证 self::setPrivilege(); //9.分发 self::setDispatch(); } } </code>
//indexphp
<code>//定义一个常量,用于其他文件的判断 //入口文件常量 define('ACCESS','ACC'); //加载初始化类Application.class.php include_once 'Core/Application.class.php'; //调用系统初始化方法 //调用Application类的静态方法 Application::run();</code>
这里应该不是setUrl
没有运行,而是在之前的setConfig
里就挂掉了。
注意检查setConfig
里的 $GLOBALS['config'] = include_once CONF_DIR . '/config.php';
看看 config.php
里的内容是否正确。
配置文件错了

在PHP中,trait适用于需要方法复用但不适合使用继承的情况。1)trait允许在类中复用方法,避免多重继承复杂性。2)使用trait时需注意方法冲突,可通过insteadof和as关键字解决。3)应避免过度使用trait,保持其单一职责,以优化性能和提高代码可维护性。

依赖注入容器(DIC)是一种管理和提供对象依赖关系的工具,用于PHP项目中。DIC的主要好处包括:1.解耦,使组件独立,代码易维护和测试;2.灵活性,易替换或修改依赖关系;3.可测试性,方便注入mock对象进行单元测试。

SplFixedArray在PHP中是一种固定大小的数组,适用于需要高性能和低内存使用量的场景。1)它在创建时需指定大小,避免动态调整带来的开销。2)基于C语言数组,直接操作内存,访问速度快。3)适合大规模数据处理和内存敏感环境,但需谨慎使用,因其大小固定。

PHP通过$\_FILES变量处理文件上传,确保安全性的方法包括:1.检查上传错误,2.验证文件类型和大小,3.防止文件覆盖,4.移动文件到永久存储位置。

JavaScript中处理空值可以使用NullCoalescingOperator(??)和NullCoalescingAssignmentOperator(??=)。1.??返回第一个非null或非undefined的操作数。2.??=将变量赋值为右操作数的值,但前提是该变量为null或undefined。这些操作符简化了代码逻辑,提高了可读性和性能。

CSP重要因为它能防范XSS攻击和限制资源加载,提升网站安全性。1.CSP是HTTP响应头的一部分,通过严格策略限制恶意行为。2.基本用法是只允许从同源加载资源。3.高级用法可设置更细粒度的策略,如允许特定域名加载脚本和样式。4.使用Content-Security-Policy-Report-Only头部可调试和优化CSP策略。

HTTP请求方法包括GET、POST、PUT和DELETE,分别用于获取、提交、更新和删除资源。1.GET方法用于获取资源,适用于读取操作。2.POST方法用于提交数据,常用于创建新资源。3.PUT方法用于更新资源,适用于完整更新。4.DELETE方法用于删除资源,适用于删除操作。

HTTPS是一种在HTTP基础上增加安全层的协议,主要通过加密数据保护用户隐私和数据安全。其工作原理包括TLS握手、证书验证和加密通信。实现HTTPS时需注意证书管理、性能影响和混合内容问题。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

Dreamweaver Mac版
视觉化网页开发工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SublimeText3汉化版
中文版,非常好用