在 PHP 中为我的 class 方法提供默认对象

Giving a default object to my class method in PHP

我想将一个 DateTimeZone 对象传递给我的 class Test 中的方法。我有以下代码:

class Test {
    function __construct( $timezone_object = new DateTimeZone() ) {
        // Do something with the object passed in my function here
    }
}

不幸的是,上面的方法不起作用。它给了我一个错误。我知道我可以改为执行以下操作:

class Test {
    function __construct( $timezone_object = NULL ) {
        if ( $timezone_object == NULL)
            $to_be_processed = new DateTimeZone(); // Do something with my variable here
        else 
            $to_be_processed = new DateTimeZone( $timezone_object ); // Do something with the variable here if this one is executed, note that $timezone_object has to be the supported timezone format provided in PHP Manual
    }
}

不过,我觉得第二个选择好像不太干净。有没有办法像首选一样声明我的方法?

如果您只是在寻找简洁的代码,您可以这样做

class Test {
    function __construct( \DateTimeZone $timezone_object = null ) {
        $this->ts = $timezone_object ?? new DateTimeZone();
    }
}

双??是一个 if null 检查。所以你有类型提示,它只允许 DateTimeZone 或 Null 值(所以这是安全的),然后如果参数为 null,你只需分配一个新的 DateTimeZone 实例,否则,使用传入的值。

编辑:找到有关 PHP 7.1+

默认 null 的信息

Cannot pass null argument when using type hinting

所以代码可以更深奥,按键次数稍微少一些

class Test {
    function __construct( ?\DateTimeZone $timezone_object ) {
        $this->ts = $timezone_object ?? new DateTimeZone();
    }
}

但在我看来,这太可怕了。