substr возвращает пустую строку, когда длина строки меньше начальных символов в PHP 8

#php #php-8

#php #php-8

Вопрос:

В документах PHP для substr() говорится:

Если длина строки меньше начальных символов, будет возвращено значение FALSE.

и приводит пример

 $rest = substr("abcdef", 4, -4);  // returns false
  

Интересно, что это, похоже, неверно, начиная с PHP 8.0.0rc1, поскольку в более новых версиях функция вместо этого возвращает пустую строку:

https://3v4l.org/RPU1s

Это ошибка в PHP или недокументированное изменение (или я что-то недопонимаю)?

Комментарии:

1. Как насчет rc4?

2. Тот факт, что такое поведение проявляется в rc, говорит мне, что это может быть ошибкой.

3. @MarkusZeller, вам придется создавать ее самостоятельно, поскольку rc4 пока недоступен на 3v4l.

4. На этой странице описывается то же самое и помечается как «изменение», хотя я не уверен, на чем они основываются.

5. github.com/php/php-src/pull/6182 показывает, что это действительно кажется преднамеренным.

Ответ №1:

Похоже, это было преднамеренное изменение, как упоминалось в https://php.watch/versions/8.0/substr-out-of-bounds

и реализовано здесь:

https://github.com/php/php-src/pull/6182