php7.0和php7.2的变量类型转换问题?

代码001 7.0版本

<?php
$a='';
$a['1']="哈哈哈";
$a['0']="zzz";
var_dump($a);
echo "PHP版本:".phpversion();
?>

结果001 7.0版本

array(2) {
  [1]=>
  string(9) "哈哈哈"
  [0]=>
  string(3) "zzz"
}
PHP版本:7.0.0-dev

代码002 5.6版本

<?php
$a='';
$a['1']="哈哈哈";
$a['0']="zzz";
var_dump($a);
echo "PHP版本:".phpversion();
?>

结果002 5.6版本

array(2) {
  [1]=>
  string(9) "哈哈哈"
  [0]=>
  string(3) "zzz"
}
PHP版本:5.6.9-0+deb8u1

代码003 7.2版本

<?php

echo PHP_VERSION;

try {
    $a = '';
    // $a->a();
    $a['1'] = "哈哈哈";
    $a['0'] = "zzz";
    var_dump($a);
} catch (Exception $e) {

    var_dump($e->getMessage());

} catch (Error $Error) {

    var_dump($Error->getMessage());
    return;
} catch (ParseError $e) {
    echo 123;
    var_dump($Error->getMessage());
} finally {
    echo 'end';

}

7.2.3结果

7.2.3string(2) "z�" end

问题

7.2内部为啥不支持这种类型转换了,从哪里可以看到具体的变化呢?内核代码也行。.

测试地址 :

在线执行php多版本

犯罪嫌疑人X
浏览 550回答 4
4回答

HUX布斯

多看文档

慕盖茨4494581

虽然我也不知道哪里可以看到具体的变化,但是我觉得这样才是比较严谨的 PHP的包容性太强了,都是给惯的坏毛病,以后接触别的语言,满头的包

米琪卡哇伊

我猜下, >=7.1的时候 $a = ''; // 这时候 $a[0]还不存在; $a[0] = "hello world"; // 相当于给字符串 $a的索引0的位置赋值 echo $a; // 'h' 输出为这个大概是string索引这个位置只能存一个字符 类型应该还是弱类型 $a[] = "hello world"; var_dump($a); // array(1) { [0]=> string(11) "hello world" } $a = ""; var_dump($a); // string(0) ""
打开App,查看更多内容
随时随地看视频慕课网APP