для скалярного значения типа ": это не так, он просто возвращает ноль вместо возврата какой-либо ошибки.

ользую PHP 7.2. Я сталкиваюсь со следующей запиской отглава массивов PHP Manual

Массив, разыменовывающий скалярное значение, которое не является строкой, автоматически возвращаетЗНАЧЕНИЕ NULLбез выдачи сообщения об ошибке.

Я понимаю, как разыменовать литерал массива, но я не могу понять, как «разыменование массива» работает со скалярным значением типа 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

Как разыменовывается скалярное значение типабулево / число / с плавающей точкой отличается от разыменования значения типастрока?

 Félix Gagnon-Grenier30 дек. 2017 г., 14:42
У вас небольшое недоразумение:$secondElement = getArray()[1]; не разыменование целых чисел, это разыменованиемассив, который содержит целые числа.$secondElement = getArray()[1][0]; вернет ноль, как ожидалось.

Ответы на вопрос(1)

Решение Вопроса

В вашем примере вы используете массив. Так что вы не видите проблемы.

<?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

Отвечая на ваш вопрос: «Как работает« Массив разыменования »?работай для скалярного значения типа ": это не так, он просто возвращает ноль вместо возврата какой-либо ошибки.

Ваш ответ на вопрос