从 PHP 版本 7.2.0 开始,"Array dereferencing" 如何处理 boolean/integer/float/string 类型的标量值?

How does the "Array dereferencing" work on a scalar value of type boolean/integer/float/string as of PHP version 7.2.0?

我正在使用 PHP 7.2。我从 arrays chapter of PHP Manual

中看到以下注释

Array dereferencing a scalar value which is not a string silently yields NULL, i.e. without issuing an error message.

我了解如何取消引用数组文字,但我无法理解 "array dereferencing" 如何处理 boolean/integer/float/string?

类型的标量值

如果您查看 PHP 手册本身的代码示例,您会注意到矛盾,因为它不是根据手册,整数类型的值不会静默产生 NULL。

<?php
function getArray() {
    return array(1, 2, 3);
}
$secondElement = getArray()[1];
var_dump($secondElement); // int(2)
//According to the manual I expected it to be NULL as it's not of type string

取消引用 boolean/integer/float 类型的标量值与取消引用类型 string 的值有何不同?

它们指的是非复杂类型,例如 int 或 float。

在您的示例中,您使用的是数组。所以你看不到问题。

<?php
function getArray() {
    return array(1, 2222, 3);
}
$secondElement = getArray()[1]; // 2222

$null = $secondElement[123456]; // 123456 can be any number or string
var_dump($null);

// similarly:
$also_null = getArray()[1][45678];
var_dump($also_null);

第一对括号是对数组 (1, 2222, 3) 的数组解引用,第二对是对整数 (2222) 的数组解引用,它总是 returns null。

简化版:

<?php
$a = 123456;
var_dump($a[42]); // is null
$a = 123.45;
var_dump($a[42]); // is null
$a = true;
var_dump($a[42]); // is null
$a = null;
var_dump($a[42]); // is null

这 "fails silently" 理论上你应该从中得到一个错误,而不仅仅是 null。

除了 int、float、bool 之外,null 也会发生:

<?php 
$a = true;
var_dump($a[42][42][42][42][42][42][42][42]); // also null, and no errors

但使用数组和字符串可以正常工作。

<?php
$a = "abc";
var_dump($a[1]); // b
$a = [11, 22, 33];
var_dump($a[1]); // 22

回答您的问题,"How does the “Array dereferencing” work on a scalar value of type":它不是,它只是 returns null 而不是返回某种错误。