Как работает «Разыменование массива»? работать со скалярным значением типа boolean / integer / float / string с PHP версии 7.2.0?

Я использую 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

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

1

Решение

Они ссылаются на не сложные типы, такие как 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

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

8

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]