Есть ли библиотека для уточненных типов в php?

Есть ли в php библиотека для уточненных типов, которая позволяет мне делать что-то подобное?

function getAge(int positive $age){
...
}

getAge(-1) // error -1 < 0

Спасибо!

0

Решение

Вам нужно будет реализовать уточнения типов на уровне двигателя. Никто еще не сделал этого.

Или используйте пользовательский препроцессор, например http://github.com/marcioAlmada/yay.

Или реализовать уточненные типы как объекты-значения, например,

class PositiveInteger
{
private $value;

public static function assertValid(int $value) {
if ($value < 0) {
throw new InvalidArgumentException("Not positive");
}
}

public function __construct(int $value)
{
static::assertValid($value);
$this->value = $value;
}

public function getValue(): int
{
return $this->value;
}

public function __toString(): string
{
return (string) $this->value;
}
}

Однако это означает, что int больше не является скаляром и не может использоваться так же, как вы бы использовали скаляр, например все операции должны быть методами. Вы не сможете сделать $age++ больше.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]