在php中是否有任何精简类型的库可以让我做这样的事情?
function getAge(int positive $age){
...
}
getAge(-1) // error -1 < 0
谢谢!
答案 0 :(得分:1)
您需要在引擎级别实施细化类型。还没有人这样做过。
或者使用userland预处理器,例如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++
。