mirror of
https://github.com/danog/Valinor.git
synced 2024-11-30 04:39:05 +01:00
718d3c1bc2
An object may have several ways of being created — in such cases it is common to use so-called named constructors, also known as static factory methods. If one or more are found, they can be called during the mapping to create an instance of the object. What defines a named constructor is a method that: 1. is public 2. is static 3. returns an instance of the object 4. has one or more arguments ```php final class Color { /** * @param int<0, 255> $red * @param int<0, 255> $green * @param int<0, 255> $blue */ private function __construct( public readonly int $red, public readonly int $green, public readonly int $blue ) {} /** * @param int<0, 255> $red * @param int<0, 255> $green * @param int<0, 255> $blue */ public static function fromRgb( int $red, int $green, int $blue, ): self { return new self($red, $green, $blue); } /** * @param non-empty-string $hex */ public static function fromHex(string $hex): self { if (strlen($hex) !== 6) { throw new DomainException('Must be 6 characters long'); } /** @var int<0, 255> $red */ $red = hexdec(substr($hex, 0, 2)); /** @var int<0, 255> $green */ $green = hexdec(substr($hex, 2, 2)); /** @var int<0, 255> $blue */ $blue = hexdec(substr($hex, 4, 2)); return new self($red, $green, $blue); } } ``` |
||
---|---|---|
.. | ||
Object | ||
Source | ||
Tree | ||
FakeNode.php |