鍍金池/ 問答/PHP  HTML/ php7.0和php7.2的變量類型轉(zhuǎn)換問題?

php7.0和php7.2的變量類型轉(zhuǎn)換問題?

代碼001 7.0版本

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

結(jié)果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();
?>

結(jié)果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結(jié)果

7.2.3string(2) "z?" end

問題

7.2內(nèi)部為啥不支持這種類型轉(zhuǎn)換了,從哪里可以看到具體的變化呢?內(nèi)核代碼也行。.

測試地址 :

在線執(zhí)行php多版本

回答
編輯回答
空痕
2018年6月15日 18:24
編輯回答
解夏

你在代碼之后加個debug_zval_dump($a), 就能看到比較詳細的變化.

<?php
$a='';
$a['1']="哈哈哈";
debug_zval_dump($a);
$a['0']="zzz";
debug_zval_dump($a);
var_dump($a);
?>
2018年7月8日 03:47
編輯回答
陪妳哭

我猜下, >=7.1的時候

$a = ''; // 這時候 $a[0]還不存在;
$a[0] = "hello world"; // 相當(dāng)于給字符串 $a的索引0的位置賦值
echo $a; // 'h'  輸出為這個大概是string索引這個位置只能存一個字符 

類型應(yīng)該還是弱類型

$a[] = "hello world";
var_dump($a); // array(1) { [0]=> string(11) "hello world" } 
$a = "";
var_dump($a); // string(0) ""
2017年1月9日 23:13
編輯回答
吃藕丑

雖然我也不知道哪里可以看到具體的變化,但是我覺得這樣才是比較嚴謹?shù)?/p>

PHP的包容性太強了,都是給慣的壞毛病,以后接觸別的語言,滿頭的包

2017年2月9日 06:13