Представляем новый Symfony UUID Polyfill

UUID (универсальный уникальный идентификатор) – это 128-битное число, используемое для идентификации информации в компьютерных системах. Они становятся все более популярными в приложениях PHP/Symfony, где некоторые разработчики используют их даже в качестве идентификаторов для записей в базе данных (вместо традиционного целого числа с автоматическим приращением).

Существуют разные варианты и версии UUID, поэтому большинство разработчиков полагаются на внешние библиотеки, такие как пакет UUID PECL и библиотека ramsey/uuid, для генерации этих UUID.

Symfony Polyfills обеспечивает повторную реализацию PHP популярных функций, классов и констант, представленных в более новых версиях PHP или расширениях PHP. Они позволяют, например, использовать класс PHP 7.3 JsonException в любой версии PHP или функцию PHP 7.4 password_algos() в любой предыдущей версии PHP.

Учитывая популярность UUID, создали новый Polyfill UUID, который переопределяет пакет UUID PECL и может использоваться в PHP 5.3 или выше. Сначала установите polyfill в свой проект:

composer require symfony/polyfill-uuid

Если в вашей системе установлен пакет UUID PECL, этот polyfill ничего не делает. В противном случае он определяет те же самые константы и функции пакета PECL, что позволяет использовать в своем коде следующее:

$uuid = uuid_create(UUID_TYPE_RANDOM);
// $uuid = '79a0f84a-2f15-4ea9-bb2c-49e645845100'

$isValid = uuid_is_valid($uuid);
// $isValid = true

// Other useful functions: uuid_compare(), uuid_is_null(), uuid_type(),
// uuid_variant(), uuid_time(), uuid_mac(), uuid_parse(), uuid_unparse()

UUID Polyfill может полностью заменить пакет UUID PECL, когда вы не можете или не хотите устанавливать пакет PECL. Однако он не предоставляет (и никогда не предоставит) те же функции полнофункциональных библиотек, как ramsey/uuid.

Что касается производительности, то polyfill работает быстрее или медленнее, чем пакет PECL, в зависимости от создаваемой версии UUID:

Время генерации UUID v1ЗначениеРазница
PECL0.525μsБыстрее
Symfony Polyfill1.401μs2.67x медленнее
Ramsey/UUID3.907μs7.45x медленнее
Время генерации UUID v4ЗначениеРазница
PECL4.620μs3.25x медленнее
Symfony Polyfill1.422μsБыстрее
Ramsey/UUID1.851μs1.30x медленнее