Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. LazyUuidFromString.php

class LazyUuidFromString

Lazy version of a UUID: its format has not been determined yet, so it is mostly only usable for string/bytes conversion. This object optimizes instantiation, serialization and string conversion time, at the cost of increased overhead for more advanced UUID operations.

@internal this type is used internally for performance reasons, and is not supposed to be directly referenced in consumer libraries.

@psalm-immutable

Note: the { relies upon: the API has been ported from the { and is deprecated anyway. Note: the deprecated API from { once the deprecated API is gone from this class too.

@psalm-suppress UndefinedInterfaceMethod @psalm-suppress DeprecatedMethod

Hierarchy

  • class \Ramsey\Uuid\Lazy\LazyUuidFromString implements \Ramsey\Uuid\UuidInterface

Expanded class hierarchy of LazyUuidFromString

See also

FieldsInterface} does not declare methods that deprecated API

\Ramsey\Uuid\Uuid} definition,

\Ramsey\Uuid\Uuid} is in use here (on purpose): it will be removed

3 files declare their use of LazyUuidFromString
Uuid.php in vendor/ramsey/uuid/src/Uuid.php
UuidFactory.php in vendor/ramsey/uuid/src/UuidFactory.php
UuidV6.php in vendor/ramsey/uuid/src/Nonstandard/UuidV6.php

File

vendor/ramsey/uuid/src/Lazy/LazyUuidFromString.php, line 55

Namespace

Ramsey\Uuid\Lazy
View source
final class LazyUuidFromString implements UuidInterface {
    public const VALID_REGEX = '/\\A[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\z/ms';
    private ?UuidInterface $unwrapped = null;
    
    /**
     * @psalm-param non-empty-string $uuid
     */
    public function __construct(string $uuid) {
    }
    
    /** @psalm-pure */
    public static function fromBytes(string $bytes) : self {
        $base16Uuid = bin2hex($bytes);
        return new self(substr($base16Uuid, 0, 8) . '-' . substr($base16Uuid, 8, 4) . '-' . substr($base16Uuid, 12, 4) . '-' . substr($base16Uuid, 16, 4) . '-' . substr($base16Uuid, 20, 12));
    }
    public function serialize() : string {
        return $this->uuid;
    }
    
    /**
     * @return array{string: string}
     *
     * @psalm-return array{string: non-empty-string}
     */
    public function __serialize() : array {
        return [
            'string' => $this->uuid,
        ];
    }
    
    /**
     * {@inheritDoc}
     *
     * @param string $data
     *
     * @psalm-param non-empty-string $data
     */
    public function unserialize(string $data) : void {
        $this->uuid = $data;
    }
    
    /**
     * @param array{string?: string} $data
     *
     * @psalm-param array{string?: non-empty-string} $data
     * @psalm-suppress UnusedMethodCall
     */
    public function __unserialize(array $data) : void {
        // @codeCoverageIgnoreStart
        if (!isset($data['string'])) {
            throw new ValueError(sprintf('%s(): Argument #1 ($data) is invalid', __METHOD__));
        }
        // @codeCoverageIgnoreEnd
        $this->unserialize($data['string']);
    }
    
    /** @psalm-suppress DeprecatedMethod */
    public function getNumberConverter() : NumberConverterInterface {
        return ($this->unwrapped ?? $this->unwrap())
            ->getNumberConverter();
    }
    
    /**
     * {@inheritDoc}
     *
     * @psalm-suppress DeprecatedMethod
     */
    public function getFieldsHex() : array {
        return ($this->unwrapped ?? $this->unwrap())
            ->getFieldsHex();
    }
    
    /** @psalm-suppress DeprecatedMethod */
    public function getClockSeqHiAndReservedHex() : string {
        return ($this->unwrapped ?? $this->unwrap())
            ->getClockSeqHiAndReservedHex();
    }
    
    /** @psalm-suppress DeprecatedMethod */
    public function getClockSeqLowHex() : string {
        return ($this->unwrapped ?? $this->unwrap())
            ->getClockSeqLowHex();
    }
    
    /** @psalm-suppress DeprecatedMethod */
    public function getClockSequenceHex() : string {
        return ($this->unwrapped ?? $this->unwrap())
            ->getClockSequenceHex();
    }
    
    /** @psalm-suppress DeprecatedMethod */
    public function getDateTime() : DateTimeInterface {
        return ($this->unwrapped ?? $this->unwrap())
            ->getDateTime();
    }
    
    /** @psalm-suppress DeprecatedMethod */
    public function getLeastSignificantBitsHex() : string {
        return ($this->unwrapped ?? $this->unwrap())
            ->getLeastSignificantBitsHex();
    }
    
    /** @psalm-suppress DeprecatedMethod */
    public function getMostSignificantBitsHex() : string {
        return ($this->unwrapped ?? $this->unwrap())
            ->getMostSignificantBitsHex();
    }
    
    /** @psalm-suppress DeprecatedMethod */
    public function getNodeHex() : string {
        return ($this->unwrapped ?? $this->unwrap())
            ->getNodeHex();
    }
    
    /** @psalm-suppress DeprecatedMethod */
    public function getTimeHiAndVersionHex() : string {
        return ($this->unwrapped ?? $this->unwrap())
            ->getTimeHiAndVersionHex();
    }
    
    /** @psalm-suppress DeprecatedMethod */
    public function getTimeLowHex() : string {
        return ($this->unwrapped ?? $this->unwrap())
            ->getTimeLowHex();
    }
    
    /** @psalm-suppress DeprecatedMethod */
    public function getTimeMidHex() : string {
        return ($this->unwrapped ?? $this->unwrap())
            ->getTimeMidHex();
    }
    
    /** @psalm-suppress DeprecatedMethod */
    public function getTimestampHex() : string {
        return ($this->unwrapped ?? $this->unwrap())
            ->getTimestampHex();
    }
    
    /** @psalm-suppress DeprecatedMethod */
    public function getUrn() : string {
        return ($this->unwrapped ?? $this->unwrap())
            ->getUrn();
    }
    
    /** @psalm-suppress DeprecatedMethod */
    public function getVariant() : ?int {
        return ($this->unwrapped ?? $this->unwrap())
            ->getVariant();
    }
    
    /** @psalm-suppress DeprecatedMethod */
    public function getVersion() : ?int {
        return ($this->unwrapped ?? $this->unwrap())
            ->getVersion();
    }
    public function compareTo(UuidInterface $other) : int {
        return ($this->unwrapped ?? $this->unwrap())
            ->compareTo($other);
    }
    public function equals(?object $other) : bool {
        if (!$other instanceof UuidInterface) {
            return false;
        }
        return $this->uuid === $other->toString();
    }
    
    /**
     * {@inheritDoc}
     *
     * @psalm-suppress MoreSpecificReturnType
     * @psalm-suppress LessSpecificReturnStatement we know that {@see self::$uuid} is a non-empty string, so
     *                                             we know that {@see hex2bin} will retrieve a non-empty string too.
     */
    public function getBytes() : string {
        
        /** @phpstan-ignore-next-line PHPStan complains that this is not a non-empty-string. */
        return (string) hex2bin(str_replace('-', '', $this->uuid));
    }
    public function getFields() : FieldsInterface {
        return ($this->unwrapped ?? $this->unwrap())
            ->getFields();
    }
    public function getHex() : Hexadecimal {
        return ($this->unwrapped ?? $this->unwrap())
            ->getHex();
    }
    public function getInteger() : IntegerObject {
        return ($this->unwrapped ?? $this->unwrap())
            ->getInteger();
    }
    public function toString() : string {
        return $this->uuid;
    }
    public function __toString() : string {
        return $this->uuid;
    }
    public function jsonSerialize() : string {
        return $this->uuid;
    }
    
    /**
     * @deprecated Use {@see UuidInterface::getFields()} to get a
     *     {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface}
     *     instance, you may call {@see Rfc4122FieldsInterface::getClockSeqHiAndReserved()}
     *     and use the arbitrary-precision math library of your choice to
     *     convert it to a string integer.
     *
     * @psalm-suppress UndefinedInterfaceMethod
     * @psalm-suppress DeprecatedMethod
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedMethodCall
     */
    public function getClockSeqHiAndReserved() : string {
        $instance = $this->unwrapped ?? $this->unwrap();
        return $instance->getNumberConverter()
            ->fromHex($instance->getFields()
            ->getClockSeqHiAndReserved()
            ->toString());
    }
    
    /**
     * @deprecated Use {@see UuidInterface::getFields()} to get a
     *     {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface}
     *     instance, you may call {@see Rfc4122FieldsInterface::getClockSeqLow()}
     *     and use the arbitrary-precision math library of your choice to
     *     convert it to a string integer.
     *
     * @psalm-suppress UndefinedInterfaceMethod
     * @psalm-suppress DeprecatedMethod
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedMethodCall
     */
    public function getClockSeqLow() : string {
        $instance = $this->unwrapped ?? $this->unwrap();
        return $instance->getNumberConverter()
            ->fromHex($instance->getFields()
            ->getClockSeqLow()
            ->toString());
    }
    
    /**
     * @deprecated Use {@see UuidInterface::getFields()} to get a
     *     {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface}
     *     instance, you may call {@see Rfc4122FieldsInterface::getClockSeq()}
     *     and use the arbitrary-precision math library of your choice to
     *     convert it to a string integer.
     *
     * @psalm-suppress UndefinedInterfaceMethod
     * @psalm-suppress DeprecatedMethod
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedMethodCall
     */
    public function getClockSequence() : string {
        $instance = $this->unwrapped ?? $this->unwrap();
        return $instance->getNumberConverter()
            ->fromHex($instance->getFields()
            ->getClockSeq()
            ->toString());
    }
    
    /**
     * @deprecated This method will be removed in 5.0.0. There is no direct
     *     alternative, but the same information may be obtained by splitting
     *     in half the value returned by {@see UuidInterface::getHex()}.
     *
     * @psalm-suppress UndefinedInterfaceMethod
     * @psalm-suppress DeprecatedMethod
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedMethodCall
     */
    public function getLeastSignificantBits() : string {
        $instance = $this->unwrapped ?? $this->unwrap();
        return $instance->getNumberConverter()
            ->fromHex(substr($instance->getHex()
            ->toString(), 16));
    }
    
    /**
     * @deprecated This method will be removed in 5.0.0. There is no direct
     *     alternative, but the same information may be obtained by splitting
     *     in half the value returned by {@see UuidInterface::getHex()}.
     *
     * @psalm-suppress UndefinedInterfaceMethod
     * @psalm-suppress DeprecatedMethod
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedMethodCall
     */
    public function getMostSignificantBits() : string {
        $instance = $this->unwrapped ?? $this->unwrap();
        return $instance->getNumberConverter()
            ->fromHex(substr($instance->getHex()
            ->toString(), 0, 16));
    }
    
    /**
     * @deprecated Use {@see UuidInterface::getFields()} to get a
     *     {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface}
     *     instance, you may call {@see Rfc4122FieldsInterface::getNode()}
     *     and use the arbitrary-precision math library of your choice to
     *     convert it to a string integer.
     *
     * @psalm-suppress UndefinedInterfaceMethod
     * @psalm-suppress DeprecatedMethod
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedMethodCall
     */
    public function getNode() : string {
        $instance = $this->unwrapped ?? $this->unwrap();
        return $instance->getNumberConverter()
            ->fromHex($instance->getFields()
            ->getNode()
            ->toString());
    }
    
    /**
     * @deprecated Use {@see UuidInterface::getFields()} to get a
     *     {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface}
     *     instance, you may call {@see Rfc4122FieldsInterface::getTimeHiAndVersion()}
     *     and use the arbitrary-precision math library of your choice to
     *     convert it to a string integer.
     *
     * @psalm-suppress UndefinedInterfaceMethod
     * @psalm-suppress DeprecatedMethod
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedMethodCall
     */
    public function getTimeHiAndVersion() : string {
        $instance = $this->unwrapped ?? $this->unwrap();
        return $instance->getNumberConverter()
            ->fromHex($instance->getFields()
            ->getTimeHiAndVersion()
            ->toString());
    }
    
    /**
     * @deprecated Use {@see UuidInterface::getFields()} to get a
     *     {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface}
     *     instance, you may call {@see Rfc4122FieldsInterface::getTimeLow()}
     *     and use the arbitrary-precision math library of your choice to
     *     convert it to a string integer.
     *
     * @psalm-suppress UndefinedInterfaceMethod
     * @psalm-suppress DeprecatedMethod
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedMethodCall
     */
    public function getTimeLow() : string {
        $instance = $this->unwrapped ?? $this->unwrap();
        return $instance->getNumberConverter()
            ->fromHex($instance->getFields()
            ->getTimeLow()
            ->toString());
    }
    
    /**
     * @deprecated Use {@see UuidInterface::getFields()} to get a
     *     {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface}
     *     instance, you may call {@see Rfc4122FieldsInterface::getTimeMid()}
     *     and use the arbitrary-precision math library of your choice to
     *     convert it to a string integer.
     *
     * @psalm-suppress UndefinedInterfaceMethod
     * @psalm-suppress DeprecatedMethod
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedMethodCall
     */
    public function getTimeMid() : string {
        $instance = $this->unwrapped ?? $this->unwrap();
        return $instance->getNumberConverter()
            ->fromHex($instance->getFields()
            ->getTimeMid()
            ->toString());
    }
    
    /**
     * @deprecated Use {@see UuidInterface::getFields()} to get a
     *     {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface}
     *     instance, you may call {@see Rfc4122FieldsInterface::getTimestamp()}
     *     and use the arbitrary-precision math library of your choice to
     *     convert it to a string integer.
     *
     * @psalm-suppress UndefinedInterfaceMethod
     * @psalm-suppress DeprecatedMethod
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedMethodCall
     */
    public function getTimestamp() : string {
        $instance = $this->unwrapped ?? $this->unwrap();
        $fields = $instance->getFields();
        if ($fields->getVersion() !== 1) {
            throw new UnsupportedOperationException('Not a time-based UUID');
        }
        return $instance->getNumberConverter()
            ->fromHex($fields->getTimestamp()
            ->toString());
    }
    public function toUuidV1() : UuidV1 {
        $instance = $this->unwrapped ?? $this->unwrap();
        if ($instance instanceof UuidV1) {
            return $instance;
        }
        assert($instance instanceof UuidV6);
        return $instance->toUuidV1();
    }
    public function toUuidV6() : UuidV6 {
        $instance = $this->unwrapped ?? $this->unwrap();
        assert($instance instanceof UuidV6);
        return $instance;
    }
    
    /**
     * @psalm-suppress ImpureMethodCall the retrieval of the factory is a clear violation of purity here: this is a
     *                                  known pitfall of the design of this library, where a value object contains
     *                                  a mutable reference to a factory. We use a fixed factory here, so the violation
     *                                  will not have real-world effects, as this object is only instantiated with the
     *                                  default factory settings/features.
     * @psalm-suppress InaccessibleProperty property {@see $unwrapped} is used as a cache: we don't expose it to the
     *                                      outside world, so we should be fine here.
     */
    private function unwrap() : UuidInterface {
        return $this->unwrapped = (new UuidFactory())->fromString($this->uuid);
    }

}

Members

Title Sort descending Deprecated Modifiers Object type Summary Overriden Title
LazyUuidFromString::$unwrapped private property
LazyUuidFromString::compareTo public function Returns -1, 0, or 1 if the UUID is less than, equal to, or greater than
the other UUID
Overrides UuidInterface::compareTo
LazyUuidFromString::equals public function Returns true if the UUID is equal to the provided object Overrides UuidInterface::equals
LazyUuidFromString::fromBytes public static function @psalm-pure
LazyUuidFromString::getBytes public function @psalm-suppress MoreSpecificReturnType
@psalm-suppress LessSpecificReturnStatement we know that { we know that {
Overrides UuidInterface::getBytes
LazyUuidFromString::getClockSeqHiAndReserved Deprecated public function @psalm-suppress UndefinedInterfaceMethod
@psalm-suppress DeprecatedMethod
@psalm-suppress MixedArgument
@psalm-suppress MixedMethodCall
LazyUuidFromString::getClockSeqHiAndReservedHex public function @psalm-suppress DeprecatedMethod Overrides DeprecatedUuidInterface::getClockSeqHiAndReservedHex
LazyUuidFromString::getClockSeqLow Deprecated public function @psalm-suppress UndefinedInterfaceMethod
@psalm-suppress DeprecatedMethod
@psalm-suppress MixedArgument
@psalm-suppress MixedMethodCall
LazyUuidFromString::getClockSeqLowHex public function @psalm-suppress DeprecatedMethod Overrides DeprecatedUuidInterface::getClockSeqLowHex
LazyUuidFromString::getClockSequence Deprecated public function @psalm-suppress UndefinedInterfaceMethod
@psalm-suppress DeprecatedMethod
@psalm-suppress MixedArgument
@psalm-suppress MixedMethodCall
LazyUuidFromString::getClockSequenceHex public function @psalm-suppress DeprecatedMethod Overrides DeprecatedUuidInterface::getClockSequenceHex
LazyUuidFromString::getDateTime public function @psalm-suppress DeprecatedMethod Overrides DeprecatedUuidInterface::getDateTime
LazyUuidFromString::getFields public function Returns the fields that comprise this UUID Overrides UuidInterface::getFields
LazyUuidFromString::getFieldsHex public function @psalm-suppress DeprecatedMethod Overrides DeprecatedUuidInterface::getFieldsHex
LazyUuidFromString::getHex public function Returns the hexadecimal representation of the UUID Overrides UuidInterface::getHex
LazyUuidFromString::getInteger public function Returns the integer representation of the UUID Overrides UuidInterface::getInteger
LazyUuidFromString::getLeastSignificantBits Deprecated public function @psalm-suppress UndefinedInterfaceMethod
@psalm-suppress DeprecatedMethod
@psalm-suppress MixedArgument
@psalm-suppress MixedMethodCall
LazyUuidFromString::getLeastSignificantBitsHex public function @psalm-suppress DeprecatedMethod Overrides DeprecatedUuidInterface::getLeastSignificantBitsHex
LazyUuidFromString::getMostSignificantBits Deprecated public function @psalm-suppress UndefinedInterfaceMethod
@psalm-suppress DeprecatedMethod
@psalm-suppress MixedArgument
@psalm-suppress MixedMethodCall
LazyUuidFromString::getMostSignificantBitsHex public function @psalm-suppress DeprecatedMethod Overrides DeprecatedUuidInterface::getMostSignificantBitsHex
LazyUuidFromString::getNode Deprecated public function @psalm-suppress UndefinedInterfaceMethod
@psalm-suppress DeprecatedMethod
@psalm-suppress MixedArgument
@psalm-suppress MixedMethodCall
LazyUuidFromString::getNodeHex public function @psalm-suppress DeprecatedMethod Overrides DeprecatedUuidInterface::getNodeHex
LazyUuidFromString::getNumberConverter public function @psalm-suppress DeprecatedMethod Overrides DeprecatedUuidInterface::getNumberConverter
LazyUuidFromString::getTimeHiAndVersion Deprecated public function @psalm-suppress UndefinedInterfaceMethod
@psalm-suppress DeprecatedMethod
@psalm-suppress MixedArgument
@psalm-suppress MixedMethodCall
LazyUuidFromString::getTimeHiAndVersionHex public function @psalm-suppress DeprecatedMethod Overrides DeprecatedUuidInterface::getTimeHiAndVersionHex
LazyUuidFromString::getTimeLow Deprecated public function @psalm-suppress UndefinedInterfaceMethod
@psalm-suppress DeprecatedMethod
@psalm-suppress MixedArgument
@psalm-suppress MixedMethodCall
LazyUuidFromString::getTimeLowHex public function @psalm-suppress DeprecatedMethod Overrides DeprecatedUuidInterface::getTimeLowHex
LazyUuidFromString::getTimeMid Deprecated public function @psalm-suppress UndefinedInterfaceMethod
@psalm-suppress DeprecatedMethod
@psalm-suppress MixedArgument
@psalm-suppress MixedMethodCall
LazyUuidFromString::getTimeMidHex public function @psalm-suppress DeprecatedMethod Overrides DeprecatedUuidInterface::getTimeMidHex
LazyUuidFromString::getTimestamp Deprecated public function @psalm-suppress UndefinedInterfaceMethod
@psalm-suppress DeprecatedMethod
@psalm-suppress MixedArgument
@psalm-suppress MixedMethodCall
LazyUuidFromString::getTimestampHex public function @psalm-suppress DeprecatedMethod Overrides DeprecatedUuidInterface::getTimestampHex
LazyUuidFromString::getUrn public function @psalm-suppress DeprecatedMethod Overrides UuidInterface::getUrn
LazyUuidFromString::getVariant public function @psalm-suppress DeprecatedMethod Overrides DeprecatedUuidInterface::getVariant
LazyUuidFromString::getVersion public function @psalm-suppress DeprecatedMethod Overrides DeprecatedUuidInterface::getVersion
LazyUuidFromString::jsonSerialize public function
LazyUuidFromString::serialize public function
LazyUuidFromString::toString public function Returns the string standard representation of the UUID Overrides UuidInterface::toString
LazyUuidFromString::toUuidV1 public function
LazyUuidFromString::toUuidV6 public function
LazyUuidFromString::unserialize public function @psalm-param non-empty-string $data
LazyUuidFromString::unwrap private function @psalm-suppress ImpureMethodCall the retrieval of the factory is a clear violation of purity here: this is a
known pitfall of the design of this library, where a value object contains
a mutable reference to a factory. We use a fixed factory here, so…
LazyUuidFromString::VALID_REGEX public constant
LazyUuidFromString::__construct public function @psalm-param non-empty-string $uuid
LazyUuidFromString::__serialize public function @psalm-return array{string: non-empty-string}
LazyUuidFromString::__toString public function Casts the UUID to the string standard representation Overrides UuidInterface::__toString
LazyUuidFromString::__unserialize public function @psalm-param array{string?: non-empty-string} $data
@psalm-suppress UnusedMethodCall

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal