я использую PHP 7.2.2
Я не могу понять следующий абзац, взятый из Руководство по PHP
Предупреждение Запись в смещение вне диапазона дополняет строку пробелами.
Нецелые типы преобразуются в целые. Неверный тип смещения испускает
E_NOTICE. Используется только первый символ назначенной строки. Как
PHP 7.1.0, назначение пустой строки приводит к фатальной ошибке.
Раньше ему присваивался нулевой байт.
У меня есть следующие сомнения / вопросы в отношении вышеприведенного абзаца:
Может кто-нибудь ответить на все мои сомнения / вопросы простым и понятным языком с подходящим примером рабочего кода?
Эта часть руководства относится к обработке строк как массива символов.
смещение вне диапазона означает целочисленный индекс, который находится в позиции, более длинной, чем сама строка в настоящее время, например, $x = "foo"; $x[10] = 'o';
результаты в $x
становление foo o
Если используется нецелое значение индекса, значение индекса преобразуется в целое число до того, как будет получен доступ к индексу строки, например, $x = "foo"; $y = $x[true];
результаты в $y
принимая значение $x[1]
— o
Недопустимые типы смещения — это все, что обычно не может использоваться в качестве смещения массива, например class Foo() {}
— индексирование строки с помощью $x[new Foo()];
поднимает предупреждение
Первая часть символа означает, что если вы попытаетесь присвоить строку индексу существующей строки, будет использоваться только первый символ назначенной строки, например, $x = "foo"; $x[0] = "hi";
результаты в $x
становление hoo
;
Присвоение строке значения пустой строки по индексу теперь приводит к ошибке, а не к «нулевому» байту \0
например, $x[0] = ''
будет смертельным.
Вот строка, например: $string = 'word';
В PHP строка является байтовым массивом. Вы можете ссылаться на определенные символы (байты) в строке по их числовому индексу. Смещение находится в диапазоне, если оно между 0
(первый символ) и strlen($string) - 1
(последний символ).
В этом примере выполняется перебор символов в строке с использованием индексов от 0 до 3.
$len = strlen($string);
for ($i=0; $i < $len; $i++) {
$char = $string[$i];
var_dump($i, $char);
}
Смещение вне диапазона — это любой индекс за пределами strlen — 1. Этот код сгенерирует уведомление:
$char = $string[4];
var_dump($char); // string ''
Примечание: смещение неинициализированной строки: 4
Использование нецелого типа в качестве индекса преобразует тип в целое число. Строка foo
(недопустимый тип смещения) в этом примере будет преобразован в 0
, поэтому первый символ строки будет заменен.
$string['foo'] = 'c';
var_dump($string); // string 'cord'
Если вы попытаетесь назначить строку с более чем одним символом, будет использоваться только ее первый символ, и если вы попытаетесь назначить индекс за концом слова, промежуточные индексы будут заполнены пробелами.
$string[5] = 'something';
var_dump($string); // string 'cord s'