王志勇 发表于 2019年06月20日 22:42
目前已经发现的不同:
1. PHP 7.0及之前的版本,对于不存在的变量,不会报错,如$_POST['abc']、$_GET['abc']。
解决的办法,目前PHP 7.1以及之后的版本,只能用$aa=@$_GET['abc'];的写法;
而PHP 7.0及之前的版本,$aa=$_GET['abc'];这样写不会有任何报错。
用屏蔽报错的方法,无法解决,因为整个程序是没有正常运行的。
在php.ini里极有可能有像PHP 7.0及之前的版本的设置语句,让其不这样严格报错。
PHP 7.1报错如此之严格,完全不像PHP的风格,连$aa=$_GET['name'];这样的语句也要报错。
2. 另一个PHP 7.1新增加的严格报错,例如在PHP 5.X这样写不会报错:
$a1=55;
echo $a1; //这里正常显示
$a1[1]=50;
echo $a1[1]; //这里开始报错
但这样写,PHP 7.1以及之后的版本,会报错。从报错上看,从PHP 7.1以及之后的版本开始,规定数组的变量名,必须不能与非数组的变量名相同。PHP 5.X则可以相同。
PHP 7.1只能这样写:
$a1=55;
echo $a1;
$a2[1]=50;
echo $a2[1];
这2种报错过于严格,完全不像PHP的风格。
2019-06-21 10:26更新:
PHP 7.1以及之后的版本,解决这种数组报错的办法:
$a1=55;
echo $a1;
$a1=array(); //清空数组
$a1[1]=50;
echo $a1[1];
2019-06-21 12:07更新:
还有一个基本语句的报错,PHP 7.0及之前,不需要声明变量就可以直接调用。比如这样:
if ($a1){}
当$a1不存在时不会报错。PHP 7.1如果没有事先声明变量,这样写,会报错。这种报错,通过用error_reporting(0);语句能够解决。但是由于程序开发的工作量太大,为了便于调试,我现在尽量不使用error_reporting(0);语句,因为每次调试时都必须手动删除这个语句。
置顶的文章:
股骨头坏死的中早期修复方法
Windows流畅度300%以上体感的操作
超低价享受i7-7700的体验
家用电脑理性优化升级天梯图之2026
服务器版Linux系统的选择之2026
秒会+实战PHP程序设计培训(2)
如何快速自制CPU天梯图?
我不明白你明不明白我明白(明白不)
最好的音乐播放硬件
如何打造全静音台式电脑之2026
近期的主题:
博客又有活儿得干了
支架设计(2):功放机+航空头的支架
数码评测(81):停电引起电脑损坏如何防止?
Debian 12.0的“致命”bug
数码评测(80):最好用的平价鼠标和维修/改装
这次的PHP大漏洞/淡定的PHPer们
“明白不”的心理机制(2)
博客/网页有没有必要做访问量统计?
数码评测(79):如何打造全静音台式电脑之2026
AI编程和人工编程的差别
世界上最好的二级域名
数码评测(78):最好的音乐播放硬件
博客新调整计划
人生讨论(28):滑翔伞运动
真玄学心得(26):最新消息
DIY(35-4):6路×2 USB全自动电脑切换器
特级干货(1-2):发质/脱发与内分泌研究
“更新提示”的好处/提醒用语
PHP和Java、CGI、Python的区别
前几天差点进入生活黑洞
版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。
与此相关的链接
自由勇专栏
Blog存档 Archives
2025年-2026年03月(10)
2024年(13)
2023年 +