php - 从 PHP5 更改 PHP7
问题描述
在 PHP7 上,我们知道变量必须使用其类型进行初始化,这与我们在 php5 上所做的不同,即根据设置的值更改类型。
如果我们测试这段代码
<?php
/* EAMPLE A */
$tLisTim="";
$i=0;
$tLisTim[$i]=100;
$i=$i+1;
$tLisTim[$i]=200;
var_dump("A");
var_dump($tLisTim);
/* EAMPLE B */
$tLisTim=[];
$i=0;
$tLisTim[$i]=100;
$i=$i+1;
$tLisTim[$i]=200;
var_dump("B");
var_dump($tLisTim);
?>
我们会得到这样的结果:
PHP 5.6
string 'A' (length=1)
array (size=2)
0 => int 100
1 => int 200
string 'B' (length=1)
array (size=2)
0 => int 100
1 => int 200
PHP 7.1
string 'A' (length=1)
string '12' (length=2)
string 'B' (length=1)
array (size=2)
0 => int 100
1 => int 200
问题是在 PHP7 中没有警告可以帮助我们正确迁移所有这些差异。
我如何检测我们何时尝试使用类型不正确的变量?
谢谢,
解决方案
没有警告是因为 PHP 7.1 没有删除对您的代码结构的支持:
空字符串上的字符修改现在与非空字符串一样工作,即写入超出范围的偏移量用空格填充字符串,其中非整数类型转换为整数,并且仅分配字符串的第一个字符用来。以前,空字符串被视为空数组。
这仍然是完全有效的:
$tLisTim="";
$tLisTim[0]=100;
$tLisTim[1]=200;
但它的行为与以前不同。
它不是默默地转换为数组,而是将字符串的第一个位置设置为1
,将第二个位置设置为2
。
这将引发错误:
$tLisTim="";
$tLisTim[]=100;
这将引发警告:
$tLisTim="";
$tLisTim['g']=100;
推荐阅读
- android - 当应用程序崩溃时,Nativescript Sentry 没有获取用户数据
- java - OpenJFX 跨平台兼容性
- algorithm - 找出棋盘中所有可能的方格,不包括选定的单元格
- php - attach() 方法不附加外键值
- python-3.x - 用线连接蒙版点
- javascript - 循环遍历数组以将相同的值应用于其他复选框
- javascript - 这两个返回函数(使用冒号或普通格式)有什么区别?谢谢
- vagrant - centos vagrant box 在 vagrant up 命令上的每个实例都调用初始化脚本
- php - Symfony PHPUnit WebTestCase 与 RenderController
- postgresql - 在 UPDATE 子查询中未强制执行 LIMIT 子句