framework icon indicating copy to clipboard operation
framework copied to clipboard

强类型开发,TP6错误提示无法定位错误的位置,日志也无错误记录。

Open yshengwu opened this issue 4 years ago • 3 comments

QQ图片20210717102159

QQ截图20210717102549

QQ图片20210717102818

第1类调2个类,2调3,3调4类中的某个方法,第四个出现问题,TP6无法定位错误位置,每次找错误位置都要一行行去查看,特别费时间。

比如在第4个类中大小写错就无法定位错误 $msg = '【'. $_SERVER['REQUEST_URI'] .'】'; 写出 $msg = '【'. $_SERVER['request_uri'] .'】'; 就只会出现上面第三个图的错误提示,有时费特别多时间来找。

yshengwu avatar Jul 17 '21 02:07 yshengwu

截图这个报错跟强类型没有关系,是你把一个数组类型直接输出了,TP渲染不了,要么转json输出,要么设置一下default_return_type

kingfer30 avatar Jul 19 '21 09:07 kingfer30

截图这个报错跟强类型没有关系,是你把一个数组类型直接输出了,TP渲染不了,要么转json输出,要么设置一下default_return_type

我不知道有没有关糸,在应用目录下在非controller,model,view 下的目录创建的PHP类,现在错误,TP无法提示到出错位置。 如果项目大,逻辑多时,要在controller,model,外还要加目录来放逻辑类和应用库类时,但在这些类出现错误时,TP6无法提示出来,比如数组索引不存在时,就抛出类似(ndefined index: order_id)错误,每个方法都要用try case来获取,如果代码多时,特别难定位到错误位置。项目大时,现在框架提示很不好用。

yshengwu avatar Jul 19 '21 09:07 yshengwu

这种undefined的错误属于最低级别错误(level是8),也是有办法处理的。 一种是接管TP的异常处理,通过实现异常处理的handle类,将你不想处理的指定到ignoreReport不作处理的变量里面,或者在report方法里面去做判断,比如: if ( stripos($e->getMessage(), "Undefined index:") !== false || stripos($e->getMessage(), "Undefined offset:") !== false || stripos($e->getMessage(), "Undefined variable:") !== false ) { return; } 还有其他方法比如改底层的错误级别: https://github.com/top-think/framework/blob/2ce3a39725cb68fd559635920ac4e1fc9548822b/src/think/initializer/Error.php#L38

error_reporting(E_ALL); 改为 error_reporting(E_ALL ^ E_NOTICE);

kingfer30 avatar Jul 19 '21 10:07 kingfer30