扩展日期时间不可变以强制实施"only midnight datetimes"



在PHP中,我试图扩展DateTimeImmutable,以确保我的自定义类型总是有午夜时间。

我想这样做是为了防止在必须使用午夜日期时间时使用非午夜日期时间引起的错误。

这是我的代码:

class MyDateTimeImmutableMidnightUTC extends DateTimeImmutable {
public function __construct(string $datetime) {
$object = new DateTimeImmutable($datetime, new DateTimeZone('UTC'));
$time = $object->format('H:i:s');
if ($time !== '00:00:00') {
throw new MyOutOfBoundsException("Midnight UTC datetime called with a non-midnight time! datetime: $datetime time: $time");
}
parent::__construct($datetime, new DateTimeZone('UTC'));
}
}

这段代码有效,但我正在创建两个相同的对象——一个用于测试时间是否为午夜,另一个用于通过父构造函数实际使用。这种重复对我来说就像是一种代码气味;如何在没有重复对象的情况下覆盖DateTimeImmutable以强制执行午夜时间?

您可以先调用父构造函数,然后用$this:检查时间

class MyDateTimeImmutableMidnightUTC extends DateTimeImmutable {
public function __construct(string $datetime) {
parent::__construct($datetime, new DateTimeZone('UTC'));
$time = $this->format('H:i:s');
if ($time !== '00:00:00') {
throw new MyOutOfBoundsException("Midnight UTC datetime called with a non-midnight time! datetime: $datetime time: $time");
}
}
}

https://3v4l.org/UdMcb

相关内容

  • 没有找到相关文章

最新更新