Что означает «вне смещения диапазона» и когда «используется только первый символ назначенной строки»?

я использую PHP 7.2.2

Я не могу понять следующий абзац, взятый из Руководство по PHP

Предупреждение Запись в смещение вне диапазона дополняет строку пробелами.
Нецелые типы преобразуются в целые. Неверный тип смещения испускает
E_NOTICE. Используется только первый символ назначенной строки. Как
PHP 7.1.0, назначение пустой строки приводит к фатальной ошибке.
Раньше ему присваивался нулевой байт.

У меня есть следующие сомнения / вопросы в отношении вышеприведенного абзаца:

  1. Что именно означает здесь «вне смещения»?
  2. Чьи нецелые типы преобразуются в целые. Это смещение или символ рассматриваемой строки, чье преобразование типа должно произойти?
  3. Что именно означает «Неверный тип смещения»?
  4. Когда «используется только первый символ назначенной строки»?
  5. Что означает пока последнее предложение «Раньше ему присваивался нулевой байт»? В частности, что означает NULL байт?

Может кто-нибудь ответить на все мои сомнения / вопросы простым и понятным языком с подходящим примером рабочего кода?

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] = ''
    будет смертельным.

3

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

Вот строка, например: $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'
3

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector