王志勇 发表于 2019年06月21日 16:17
经过几天的持续调试,我的电脑终于完成PHP 7.X的环境安装+一键还原。昨晚排查出了PHP 5.X和PHP 7.X写法的不同,主要是由于从PHP 7.1开始,其报错规则非常严格。只要一个变量不存在,当调用它时,就会报错。数组的名称,也不能与已有的变量同名(如果有,PHP 7.X必须先清除数组)。这种严格的报错规则,多见于其它的语言。PHP之所以让开发者感到轻松,就是因为无需每次都声明变量。
接下来的工作,需要对所有的程序都逐一排查,对于需要声明变量的地方,全部进行修补。
几个PHP 5.X和PHP 7.X不同的例子。
实例1:比如Feedval的表头文件/t/h.php,在这个位置,$a='';$a[$c1]=' style=background-color:#08AD45;color:#FEFFF8';
原来PHP 5.X只要这样写一句:$a='';就可以防止数组与变量同名。
但在PHP 7.X这样写会报错,因为$a[]这个数组,共有4个值,这4个值代表的是表头的4个导航按钮的背景色,当某个值存在时,背景色为绿色,其余3个值为空。这时,PHP 7对这种空值会报错。修改后,只能这样写,给这4个值都填充上:
$a=array();for ($i=1;$i<=4;$i++) $a[$i]='';
实例2:高频常用的语句,例如需要写入Cookies,需要先获取当前域名,用来给整个域名写入Cookies,PHP 5.X只要这样写,不会有任何报错:
$h=explode('.',$_SERVER['HTTP_HOST']);$i=count($h);$cka='.'.$h[$i-2].'.'.$h[$i-1];
到了PHP 7.1,如果在本机调试,就会报错。因为$_SERVER['HTTP_HOST']是获取域名,本机的域名称为localhost,而explode检测不到域名中含有的点,于是报错,所以PHP 7.X的语句只能改成这样,防止域名中的点不存在:
$a=$_SERVER['HTTP_HOST'];$cka=$a;if (strpos($cka,'.')){$t=explode('.',$a);$i=count($t);$cka='.'.$t[$i-2].'.'.$t[$i-1];}
在PHP 7.1,变量不存在而引用,引起的报错,可以用error_reporting(0);来屏蔽,程序可正常运行。这种报错,我还是需要一一全部修改,而不用error_reporting(0);来解决。因为即使使用了error_reporting(0);语句,在广大用户的主机上的Apache、或PHP错误日志上,可能会频繁写入,使错误日志文件迅速增大。所以,完美的程序需要避免所有的报错写法。
但是数组与变量同名,而未清除引起的报错,PHP 7.X无法用error_reporting(0);屏蔽,程序无法运行。
置顶的文章:
论朋友圈可以发什么?
短信验证开发的方案分享
巡回更新:2018-09-21
速度是永恒的主题
UTF-8、HTTPS原来都是浮云
https安全吗?
独立博客有必要安装https吗?
近期的主题:
夜晚靓歌(10):你没看过的《星雨心愿》
Feedval、Blogval将下线/谈理财和生存
2024.9感言
人生讨论(20):有人借钱怎么办?(2)
人生讨论(19):迄今为止最强的情感频道
数码评测(67):让小米/红米手机的反应提高1~2倍
数码评测(66):无线网卡FW150UH VS FW150UH
数码评测(65):如何快速自制CPU天梯图?
数码评测(64):2024年,你还在用VGA线吗?
人生讨论(18):6年就可以实现财务自由
人生讨论(17):为什么总是受欺负?
人生讨论(16):要钱的最新妙招
创业杂谈(17):什么项目能赢利?
人生讨论(15):有人借钱怎么办?
数码评测(63):高清切换超级神器
数码评测(62):再谈视频的尺寸
数码评测(61):近期数码采购和折腾
人生讨论(14):看穿尊重
数码评测(60):图拉丁-最佳中配工作“免费”手机
创业杂谈(16):博客何时终结?
版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。
与此相关的链接
自由勇专栏
Blog存档 Archives
2022年07月
2022年06月(15)
2022年05月(20)
2022年04月(16)
2022年03月(9)
2022年02月(9)
2022年01月(10)
2021年 +