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\LazyView 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 |