tp5的报错机制更改

在使用tp5框架时,由于代码的不规范(变量未声明就直接使用),很容易出现这种Notice级别的报错,其原因在于:

  1. public/ 目录下的入口文件:index.php
require __DIR__ . '/../thinkphp/start.php';
  1. thinkphp/ 目录下的 start.php
namespace think;

// ThinkPHP 引导文件
// 加载基础文件
require __DIR__ . '/base.php';
// 执行应用
App::run()->send();
  1. base.php文件定义了核心常量及加载类文件。
// 注册自动加载
\think\Loader::register();

// 注册错误和异常处理机制
\think\Error::register();

// 加载惯例配置文件
\think\Config::set(include THINK_PATH . 'convention' . EXT);

注意 Error::register();
该文件Error.php位入thinkphp/library/think/Error.php

public static function register()
{
    error_reporting(E_ALL);
    set_error_handler([__CLASS__, 'appError']);
    set_exception_handler([__CLASS__, 'appException']);
    register_shutdown_function([__CLASS__, 'appShutdown']);
}

error_reporting(E_ALL); 也就是报告任何错误。

然后看tp5手册对《错误与调试》部分对此的说明:

本着严谨的原则,5.0版本默认情况下会对任何错误(包括警告错误)抛出异常,如果不希望如此严谨的抛出异常,
可以在应用公共函数文件中或者配置文件中使用

error_reporting :方法设置错误报错级别(请注意,在入口文件中设置是无效的),
例如:

error_reporting(E_ERROR | E_PARSE );

因此,根据tp5框架加载原则,即使在入口文件添加了 error_reporting(E_ERROR | E_PARSE ) 依然无效,因为会被后面的代码覆盖。

故参考tp手册,我们可以在项目目录 application/Module/下的common.php 或者config.php下文件添加 error_reporting(E_ERROR | E_PARSE );

注意:config.php添加 error_reporting(E_ERROR | E_PARSE ); 要在 return []; 之前添加。

当然,除了以上两种方式外,我们还可以在控制器代码添加 error_reporting(E_ERROR | E_PARSE
);
来避免代码不规范引起的频繁报错。

个人建议最好是在config.php文件添加以上代码。
按照tp5文件加载顺序,应用配置文件config.php优先于common.php加载。

总结:解决notice、warning报错的方案有

1 、修改框架源码(强烈建议不要使用此方法,破坏框架设计原则–代码严谨性)

error_reporting(E_ALL);

修改为
error_reporting(E_ERROR | E_PARSE )

2、应用配置文件config.php添加 (如果忽略代码严谨性原则,强烈推荐使用)

error_reporting(E_ERROR | E_PARSE )

3、应用公共文件common.php添加

error_reporting(E_ERROR | E_PARSE )

4、控制器添加(此方式只对本控制器执行的代码有效,并非全局有效,作局部屏蔽使用。)

error_reporting(E_ERROR | E_PARSE )

5、根据4衍生而来,建立Base控制器(此方式对所有控制器均有效。)

Base控制器 extends \think\Controller,然后添加如下代码,然后让所有控制器都继承Base控制器即可。

public function _initialize(){
    parent::_initialize();
    error_reporting(E_ERROR | E_PARSE )}

最后,本着代码严谨性原则,遵循开发规范,强烈推荐大家在开发中不要忽略notice和warning错误的报告。问题早发现,早解决。

原文链接:https://blog.csdn.net/lvqingyao520/article/details/78661577

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值