王志勇 发表于 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吗?
近期的主题:
创业杂谈(6):捡钱/赚钱的一个重要原理
夹缝中生存
2023新年开篇:人生最重要的事情,念经持咒
2022年结语
创业杂谈(5):赚钱方法秘密的发现
创业杂谈(4):博客怎样写有(大的)流量?
中文博客最恰当的叫法
本博客需要重温置顶
指出最不规范的网名
编程杂谈(6):永恒的论坛和2023问题
创业杂谈(3):为什么网络赚钱会这样难?
谈永恒的论坛
最难熬的2022年冬天
创业杂谈(2):寻求成功
通勤50分钟买电驴吗?
编程杂谈(5):为什么说编程就是创业?
编程杂谈(4):擅长和成功
编程杂谈(3):为什么写程序必须辞职?
编程杂谈(2):最重要的因素和资金问题
编程杂谈(1):选择项目
版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。
与此相关的链接
自由勇专栏
Blog存档 Archives
2022年07月
2022年06月(15)
2022年05月(20)
2022年04月(16)
2022年03月(9)
2022年02月(9)
2022年01月(10)
2021年 +