Как понять термин «разыменование» вне контекста указателей?

Доброй ночи.
В C-подобных языках, если я все верно понял, разыменование означает получение доступа к участку памяти, на который ссылается указатель. В PHP есть термин "разыменование массива", и я прочел это как "получить доступ к данным массива". Однако вот эта цитата (источник) не поддается пониманию, если мыслить о разыменовании так, как я описал выше:

Массив, разыменовывающий скалярную величину, не являющуюся строкой, отдаст NULL без какого-либо оповещения об ошибке.

Вот я попытался воспроизвести, но получил в ответ то, что и ожидалось бы любым, кто видит php в первый раз.
function get_array() {
  $array = [1, 'string', 23];

  return $array;
}

// разыменовал скалярную величину, которая int, получил 1
echo get_array()[0];

Кривой перевод, или я чего-то не понял?

Заранее спасибо.
  • Вопрос задан
  • 638 просмотров
Решения вопроса 2
DevMan
@DevMan
в пыхе запись $var[0] может означать 2 вещи:
- первый элемент массива, если $var массив
- первый символ строки, если $var строка

прост в оригинале дано тупое описание, ну и перевод, соответственно, такой же.
отквоченная вами строка буквально означает следующее: "при разименовании массива и указании несуществующего ключа вы получите null, a не ошибку".
Ответ написан
Immortal_pony
@Immortal_pony Куратор тега PHP
var_dump(get_array()[0]['id']); // null
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@vasmed
Похоже что DevMan не полностью раскрыл нюанс этой проблемы.
$massiv = 1;
var_dump($massiv[0]); // выводит null

$massiv = "1";
var_dump($massiv[0]); // выводит string(1) "1" 

$massiv = "1";
var_dump($massiv[1]); // выводит  PHP Notice: Uninitialized string offset: 1 in index.php on line 9 string(0) ""

$massiv = array(1,2,3);
var_dump($massiv['asdf']); // выводит PHP Notice: Undefined index: asdf in index.php on line 12 NULL

Т.е. строку можно перевести так:
"Если вы пытаетесь разименовать переменную, в которой содержится скалярное значение (integer, float, string, boolean), кроме string (т.е. integer, float, boolean), то будет выводиться NULL без какого-либо оповещения об ошибке."
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы