王志勇 发表于 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的体验
https速度测试(可下载精确测试工具)
家用电脑理性优化升级天梯图之2026
服务器版Linux系统的选择之2026
秒会+实战PHP程序设计培训(2)
如何快速自制CPU天梯图?
我不明白你明不明白我明白(明白不)
近期的主题:
本机安装PHP 8
健康维护(2):股骨头坏死有多接近?
北京之行2026
健康维护(1):为什么晚上睡觉时会肚子疼?
https利弊(5):技术上的定向安全与垄断本质
博客正在加紧调整中
十分感谢博友点评:自由勇 二十年博客的老程序员
DIY(35-3):6路×2 USB全自动电脑切换器
这次突然特别理解老罗
支架设计(1):船型开关固定
DIY(35-2):6路×2 USB全自动电脑切换器
今天起名未成功
DIY(37):我是如何坚持完成这些DIY作品的?
DIY(36):支架、外壳如何快速1:1精确定模?
DIY(35):6路×2 USB全自动电脑切换器
夜晚靓歌(14):封神级《演员》
真玄学心得(25):生存禁忌红线
https利弊(4):商业(大型)逻辑
流畅的系统和火狐浏览器
https利弊(3):https延迟和生态
版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。
与此相关的链接
自由勇专栏
Blog存档 Archives
2025年-2026年03月(10)
2024年(13)
2023年 +