用户
 找回密码
 入住 CI 中国社区
搜索
查看: 2016|回复: 5
收起左侧

[版本 4.x] CI4 遇到使用未审明的变量时,就终止程序进行了,如何处理

[复制链接]
发表于 2018-5-26 17:41:15 | 显示全部楼层 |阅读模式
CI4 遇到使用未审明的变量时,就终止程序进行了,如何处理

是不是要重写一下 相关的方法。。。

PHP复制代码
 
 
CRITICAL - 2018-05-26 04:16:38 --> Undefined index: step
#0 D:\wamp64\wwwroot\ci4.com\application\Controllers\Home.php(10): CodeIgniter\Debug\Exceptions->errorHandler(8, 'Undefined index...', 'D:\\wamp64\\wwwro...', 10, Array)
#1 D:\wamp64\wwwroot\ci4.com\system\CodeIgniter.php(714): App\Controllers\Home->index()
#2 D:\wamp64\wwwroot\ci4.com\system\CodeIgniter.php(249): CodeIgniter\CodeIgniter->runController(Object(App\Controllers\Home))
#3 D:\wamp64\wwwroot\ci4.com\system\CodeIgniter.php(204): CodeIgniter\CodeIgniter->handleRequest(NULL, Object(Config\Cache))
#4 D:\wamp64\wwwroot\ci4.com\index.php(36): CodeIgniter\CodeIgniter->run()
#5 {main}
 
复制代码



QQ截图20180526172050.png

QQ截图20180526172210.png
 楼主| 发表于 2018-5-26 18:50:25 | 显示全部楼层
自问自答 ...(#^.^#)

我在 system/debug/exceptions.php 里找到 public function errorHandler(int $severity,这个 $severity 就是错误等级 数字

作为非专业编程人员 我是这样找问题的..粗暴吧

QQ截图20180526184506.png

QQ截图20180526184542.png

后来改成了 !in_array($severity,array(2,8))   
Ok 结束 又开始愉快的使用CI4了


另附错误报告的等级,掌握了一个小知识点啊

值          常量                     说明
1           E_ERROR             报告导致脚本终止运行的致命错误
2           E_WARNING       报告运行时的警告类错误(脚本不会终止运行)
4           E_PARSE             报告编译时的语法解析错误
8           E_NOTICE           报告通知类错误,脚本可能会产生错误
32767   E_ALL                  报告所有的可能出现的错误(不同的PHP版本,常量E_ALL的值也可能不同)
 楼主| 发表于 2018-5-26 18:54:29 | 显示全部楼层
补充  我觉得ci4应该在配置文件里 再加一个这样的错误等级显示 ,
现在来看, 要重写这个小方法,有点懵
发表于 2018-5-26 22:06:25 | 显示全部楼层
赞楼主的钻研精神。

不过我个人认为程序中不应该出现未定义变量,所有变量都应该先声明后使用,或者先检测是不是存在再使用,这才是严谨的代码。
发表于 2018-5-28 18:01:56 | 显示全部楼层
本帖最后由 272021899 于 2018-5-28 18:17 编辑

在使用原生_GET  之前一般都会 用 isset 判断下。没有就给默认值
PHP复制代码
$step = isset($_GET['step ']) ? $_GET['step '] : 0;
复制代码

ci4 里面 GET POST 不是这么用的。现在框架都流行封装在request里面

https://codeigniter-chinese.gith ... ncomingrequest.html

在控制器里面你可以直接

PHP复制代码
        $this->request->getGet();
        $this->request->getPost();
        $this->request->getPostGet();//先 $_POST, 后 $_GET
        $this->request->getGetPost();//先 $_GET, 后 $_POST
 
 
复制代码




 楼主| 发表于 2018-5-28 20:02:22 | 显示全部楼层
272021899 发表于 2018-5-28 18:01
在使用原生_GET  之前一般都会 用 isset 判断下。没有就给默认值
ci4 里面 GET POST 不是这么用的。现在框 ...

谢谢,学习了

本版积分规则