2016-04-08 2 views
1

С учетом строки $s и функции substr(substr($s, 1), -1) вы ожидаете, что один символ будет снят спереди и один с тыльной стороны.PHP-ошибка для 2-символьных строк?

Это то, что вы получите, если вы запустите substr(substr('abc', 1), -1) === 'b' И, если вы запустите его на ab, вы получите b.

Однако, если вы запустите substr(substr($s, -1), 1), вы получите желаемый результат по 2 символьным строкам.

Это то же самое в PHP 5.5 и 7.0

+1

Какой желаемый результат на 2 символьных строках? – Federkun

+0

, чтобы он был пустым, независимо от того, приходит ли первый или первый 1 –

+0

Я имею в виду, что я выяснил, как обойти его, но его странное поведение –

ответ

2

Что происходит с substr(substr('ab', 1), -1):

  • substr('ab', 1) возвращение b и substr('b', -1) возвращение b. Зачем? Как documented, если второй аргумент substr отрицательный, возвращаемая строка будет начинаться с символа начала с конца строки.

вместо с substr(substr('ab', -1), 1):

  • substr('ab', -1) вернется b и substr('b', 1) возвращение false, потому что, всегда как документировано: Если строка меньше, чем начать символов, будет возвращено значение FALSE.

Нет ошибок здесь.

+0

спасибо, не видел, что в документах сначала :) –