Предоставление объекта по умолчанию для моего метода класса в PHP - PullRequest
0 голосов
/ 04 марта 2019

Я хочу передать объект DateTimeZone моему методу в моем классе 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
    }
}

Однако я думаю, что второй вариант выглядит довольно нечистым.Есть ли способ объявить мой метод первым выбором?

1 Ответ

0 голосов
/ 04 марта 2019

Если вы просто ищете краткий код, вы можете сделать

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

двойное число ??является проверкой if null.Таким образом, у вас есть тип подсказки, который будет позволять только значение DateTimeZone или Null в (так что это безопасно), затем вы просто назначаете новый экземпляр DateTimeZone, если аргумент был нулевым, в противном случае используйте переданное значение.

Правка: Найдена информация по умолчанию null для PHP 7.1 +

Невозможно передать нулевой аргумент при использовании подсказки типа

Так что код может быть еще более эзотерическим, с немного меньшими нажатиями клавиш

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

Но, на мой взгляд, это просто ужасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...