PHP: Объектно-ориентированный дизайн
Теория: Symfony String
PHP долгое время не работал с многобайтовыми кодировками, такими как UTF-8.
Даже если попробовать выполнить любую операцию над строкой, включающей не ASCII-символы, станет видно, что функции по-прежнему не умеют обрабатывать такие строки. Дело в том, что в целях соблюдения обратной совместимости, в PHP было создано отдельное подмножество функций, имеющих аналогичные названия, но с префиксом mb_.
Такая ситуация очень неприятна и из популярных языков присутствует в PHP, C++ и C. В большинстве остальных языков есть ровно один набор функций, работающий со всеми кодировками. Минимизировать проблему можно использованием только функций с префиксом mb_, так как они прекрасно работают и для английского алфавита, и вообще для любых строк.
Вторая проблема, уже типичная — функций довольно много и некоторые из них низкоуровневые. Например, проверить то, что строка начинается с определённой подстроки можно с помощью функции strpos().
Такой код, мало того, что сложен (не очевидно, что он делает), так ещё и является постоянным источником ошибок из-за неявного приведения типов. Поэтому в PHP появилась функция str_starts_with():
Symfony String
Библиотека Symfony String предоставляет унифицированный объектно-ориентированный интерфейс для работы со строчками. Она работает как типичный Builder, например, Collect.
Применение методов к обёрнутой строке всегда возвращает обёрнутую строку. Такое поведение добавляет возможность строить цепочки.
Кроме того, объект, возвращаемый функцией s(), реализует магический метод __toString(), а это значит, что не придётся заниматься преобразованием типов, как в случае с Collect. Каждый раз, когда объект используется как строка, на его месте оказывается строка.
Библиотека Symfony String содержит инструменты, которые пришлось бы самостоятельно писать для решения типовых задач. Рассмотрим преобразование названия курса в латинский вариант, чтобы использовать его в урле. Слаг (Slug) - это строка, которая выводится в адресе страницы. Как правило это латинские символы, которые могут быть разделены через тире. Например, в адресе https://ru.hexlet.io/blog/posts/sovershennyy-kod-biblioteka-ili-svoe-reshenie часть sovershennyy-kod-biblioteka-ili-svoe-reshenie будет слагом статьи.
В библиотеке Symfony String есть специальный класс, который позволяет создавать слаги:
Класс AsciiSlugger возьмет на себя способ преобразования кириллицы в латиницу. Метод slug() вернет экземпляр класса Symfony\Component\String\UnicodeString, который содержит методы, необходимые для работы со строкой.
.png)


