PHP 5.X和PHP 7.1写法的2个不同(修改需要庞大的工作量)

王志勇 发表于 2019年06月20日 22:42

这几天经过很多波折,终于把Win 10+PHP 7.1的工作平台搭建完成。作为开发平台,Win 10操作系统,在很多方面都远不如XP好用。目前,XP、Win 7都无法安装PHP 7.X。我原来在PHP 5.X编写的程序,在PHP 7.1都无法运行,在PHP 7.0下运行正常。今天经过排查,终于找到了原因。由于写法不同,导致PHP 5.X下编写的程序,无法在PHP 7.1下运行。

目前已经发现的不同:

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);语句,因为每次调试时都必须手动删除这个语句。

4条评论:
1   拜仁慕尼黑 2019-06-21 11:12
还是php7好,快
2   格子老师 2019-06-21 17:54
你的博文被我推荐到了 这里 http://www.jetli.com.cn/good.html

自由勇 2019-06-21 17:58
感谢支持!那一篇本来是想悄悄说的,所以关闭了评论,而且没有推送到Blogval。
看来还是有读者喜欢这篇,所以心里很高兴!:)
谢谢!:))

3   西枫里博客 2019-06-22 10:24
emmm。。
慢慢学吧,还有很多好玩的你没用上,比如,命名空间、自动加载、composer包,强类型等等~

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

正文:

  记住信息?

直接发送Trackback到此文章

说明:本评论系统不支持HTML代码。(您的留言需要审核,审核规则请见这里。)

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

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

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

Blog存档 Archives

2019年09月
2019年08月
2019年07月
2019年06月
2019年05月
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-2019 auiou.com All rights reserved.
此Blog程序由王志勇编写 已经发布在Arsue