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 (42周岁)
程序设计,前端设计。

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

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

Blog存档 Archives

2021年12月(11)
2021年11月(16)
2021年10月(18)
2021年09月(14)
2021年08月(19)
2021年07月(15)
2021年06月(9)
2021年05月(17)
2021年04月(25)
2021年03月(6)
2021年02月(17)
2021年01月(30)
2020年12月(19)
2020年11月(18)
2020年10月(15)
2020年09月(14)
2020年08月(14)
2020年07月(14)
2020年06月(16)
2020年05月(13)
2020年04月(18)
2020年03月(14)
2020年02月(15)
2020年01月(16)
2019年12月(11)
2019年11月(26)
2019年10月(25)
2019年09月(30)
2019年08月(10)
2019年07月(29)
2019年06月(30)
2019年05月(26)
2019年04月(30)
2019年03月(30)
2019年02月(30)
2019年01月(30)
2018年12月(30)
2018年11月(30)
2018年10月(30)
2018年09月(17)
2016年-2017年(9)
2014年06月-09月(10)
2013年 +

2012年 +
2011年 +
2010年 +
2009年 +
2008年 +
2007年 +
2006年 +
2005年09月(4)

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