Я использую PHP 7.2. Я сталкиваюсь со следующей запиской от глава массивов PHP Manual
Массив, разыменовывающий скалярное значение, которое не является строкой без вывода сообщений.
доходность НОЛЬ, то есть без выдачи сообщения об ошибке.
Я понимаю, как разыменовать литерал массива, но я не могу понять, как «разыменование массива» работает со скалярным значением типа boolean / integer / float / string?
Если вы посмотрите на пример кода из самого руководства по PHP, вы можете заметить противоречие, так как это не то, что значение типа integer не дает 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
Как разыменовывается скалярное значение типа булево / число / с плавающей точкой отличается от разыменования значения типа строка?
Они ссылаются на не сложные типы, такие как 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), которое всегда возвращает ноль.
Упрощенная:
<?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
Это «молча терпит неудачу», так как в теории вы должны получить ошибку, а не просто ноль.
Также происходит с null, кроме int, float, bool:
<?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
Отвечая на ваш вопрос: «Как работает« Массив разыменования »? Работа для скалярного значения типа «: это не так, он просто возвращает ноль вместо того, чтобы возвращать какую-то ошибку.
Других решений пока нет …