使用设置的时区扩展DateTime对象

axs*_*uul 2 php datetime design-patterns

我在用什么模式来解决这个问题上遇到了麻烦

class DateTimeReference {
    function __construct($time) {
        $this = new DateTime($time, new DateTimeZone("UTC"));

    }
}

$date = new DateTime("now");                // in server time
$dateref = new DateTimeReference("now");    // in UTC
Run Code Online (Sandbox Code Playgroud)

基本上我想创建一个DateTime对象的"扩展",但设置时区.当然,这是一个错误,因为您无法重新分配$this.我不想使用工厂对象 - 任何人都可以向我推荐我如何处理这个问题(或者使用什么模式,例如?).可能是装饰模式?

Jam*_*mes 5

我不知道这是否适合您想要使用的模式,但它应该有效.

class DateTimeReference extends DateTime {
    function __construct(string $time = "now" , DateTimeZone $timezone = NULL ) {
        parent::__construct($time, new DateTimeZone("UTC"));
    }
}
Run Code Online (Sandbox Code Playgroud)

或者如果您希望用户能够覆盖时区,但如果未设置则默认为UTC:

class DateTimeReference extends DateTime {
    function __construct(string $time = "now" , DateTimeZone $timezone = NULL ) {
        parent::__construct($time,  is_null($timezone) ?  new DateTimeZone("UTC") : $timezone );
    }
}
Run Code Online (Sandbox Code Playgroud)