brucegithub / minimal-vo
Minimal lib to use vo: immutability, semantic, typed objects
v0.1.0
2022-04-06 20:28 UTC
Requires
- php: ^8
Requires (Dev)
- phpspec/prophecy-phpunit: ^2.0
- phpunit/phpunit: ^9
- ramsey/conventional-commits: ^1.3
- roave/security-advisories: dev-master
- vimeo/psalm: ^4.4
README
Minimal lib to use vo: immutability, semantic, typed objects
Usage
composer require brucegithub/minimal-vo
Example
<?php namespace Tests\Example; use MinimalVo\BaseValueObject\AbstractVo; /** * @template-extends AbstractVo<bool,CustomVo> */ class CustomVo extends AbstractVo { public function __construct(bool $value, protected string $value2) { parent::__construct($value); } public function equal($vo): bool { if ($this->value === $vo->value && $this->value2 === $vo->value2) { return true; } return false; } public function valid(): bool { if ($this->value && $this->value2) { return true; } return false; } public function duplicate() { return new self($this->value, $this->value2); } }
<?php namespace Tests\Example; use MinimalVo\BaseValueObject\AbstractVo; use MinimalVo\BaseValueObject\IntegerVo; /** * @template-extends AbstractVo<IntegerVo,CustomVoOfVo> */ class CustomVoOfVo extends AbstractVo { public function __construct(IntegerVo $value, protected int $value2) { parent::__construct($value); } public function equal($vo): bool { if ($this->value === $vo->toValue() && $this->value2 === $vo->value2) { return true; } return false; } public function valid(): bool { if ($this->value->toValue() >1 && $this->value2>1) { return true; } return false; } public function duplicate() { return new self($this->value, $this->value2); } }
<?php namespace Tests\Example; use MinimalVo\BaseValueObject\AbstractVo; /** * @template-extends AbstractVo<\DateTimeImmutable,CustomDateTimeVo> */ class CustomDateTimeVo extends AbstractVo { public function __construct(\DateTimeImmutable $value) { parent::__construct($value); } public function equal($vo): bool { if ($this->value === $vo->toValue()) { return true; } return false; } public function valid(): bool { return false; } public function duplicate() { return new self($this->value); } }