Feedval程序已经开始修改为PHP 7的写法(Feedval开发实况24)

王志勇 发表于 2019年06月21日 16:17

Feedval目前在PHP 5.X可完美运行。PHP 7.0应该也可以运行,暂不支持PHP 7.1和之后的版本。已经开始全力修改,使其能够兼容PHP 7.1~最新的PHP 7.3。

经过几天的持续调试,我的电脑终于完成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);屏蔽,程序无法运行。

4条评论:
1   拜仁慕尼黑 2019-06-21 17:58
永瓦是勇哥的?
厉害啊。

自由勇 2019-06-21 18:00
是的,谢谢鼓励和夸奖。:)

2   格子老师 2019-06-22 06:23
学习了!!

自由勇 2019-06-22 07:35
谢谢支持!:)

发表评论:
名字: (*必填)
博客: (可省)

正文:

  记住信息?

王志勇:1980-09-26 (44周岁)
程序设计,前端设计。

版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。

与此相关的链接
自由勇专栏

Blog存档 Archives

2022年07月
2022年06月(15)
2022年05月(20)
2022年04月(16)
2022年03月(9)
2022年02月(9)
2022年01月(10)
2021年 +

2020年 +
2019年 +
2018年 +
2016年-2017年(9)
2014年06月-09月(10)
2013年 +
2012年 +
2011年 +
2010年 +
2009年 +
2008年 +
2007年 +
2006年 +
2005年09月(4)

Copyright © 2006-2024 auiou.com All rights reserved.
此Blog程序由王志勇编写