Зарегистрируйтесь, чтобы продолжить обучение

Symfony String PHP: Объектно-ориентированный дизайн

PHP долгое время не работал с многобайтовыми кодировками, такими как UTF-8.

<?php

// Выведет неверный результат
strlen('привет'); // 12

Даже если попробовать выполнить любую операцию над строкой, включающей не ASCII-символы, станет видно, что функции по-прежнему не умеют обрабатывать такие строки. Дело в том, что в целях соблюдения обратной совместимости, в PHP было создано отдельное подмножество функций, имеющих аналогичные названия, но с префиксом mb_.

<?php

mb_strlen('привет'); // 6

Такая ситуация очень неприятна и из популярных языков присутствует в PHP, C++ и C. В большинстве остальных языков есть ровно один набор функций, работающий со всеми кодировками. Минимизировать проблему можно использованием только функций с префиксом mb_, так как они прекрасно работают и для английского алфавита, и вообще для любых строк.

Вторая проблема, уже типичная — функций довольно много и некоторые из них низкоуровневые. Например, проверить то, что строка начинается с определённой подстроки можно с помощью функции strpos().

<?php

// Обязательно проверять строго на равенство нулю
strpos('start', 'st') === 0; // true

Такой код, мало того, что сложен (не очевидно, что он делает), так ещё и является постоянным источником ошибок из-за неявного приведения типов. Поэтому в PHP появилась функция str_starts_with():

str_starts_with('start', 'st') // true

Symfony String

Библиотека Symfony String предоставляет унифицированный объектно-ориентированный интерфейс для работы со строчками. Она работает как типичный Builder, например, Collect.

<?php

use function Symfony\Component\String\s;

s('fòôbàř')->upper(); // 'FÒÔBÀŘ'
s('start')->startsWith('st'); // true

Применение методов к обёрнутой строке всегда возвращает обёрнутую строку. Такое поведение добавляет возможность строить цепочки.

<?php

s('FÒÔ     BÀŘ')->collapseWhitespace()->lower(); // fòô bàř

Кроме того, объект, возвращаемый функцией 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 есть специальный класс, который позволяет создавать слаги:

use Symfony\Component\String\Slugger\AsciiSlugger;

$title = 'Совершенный код: библиотека или своё решение';

$slugger = new AsciiSlugger();
$slug = $slugger->slug($title)->lower();

print($slug); // => soversennyj-kod-biblioteka-ili-svoe-resenie

Класс AsciiSlugger возьмет на себя способ преобразования кириллицы в латиницу. Метод slug() вернет экземпляр класса Symfony\Component\String\UnicodeString, который содержит методы, необходимые для работы со строкой.


Дополнительные материалы

  1. Что такое кодировки?
  2. Symfony String

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Laravel
10 месяцев
с нуля
Старт 13 марта

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»
Oleg Ushkevich
ТСТопик закрыт
Petr Dobrokhotov
ТСТопик закрыт
Решено
Отмечено как решение
Решено
Отмечено как решение
Alexey Maron
ТСТопик закрыт
Pavel Mironovich
ТСТопик закрыт
Решено
Динара
ТСТопик закрыт
Решено
Александр
ТСТопик закрыт
Решено
Решено
Артем
ТСТопик закрыт
Решено