未设置cookie覆盖方法参数

时间:2017-07-11 10:17:28

标签: php

所以,我有一个方法可以将时区转换为另一个:

public function timeZoneConverter($from, $to = "America/New_York", $outputformat){
        $time = new DateTime($from, new DateTimeZone('America/New_York'));
        $time->setTimezone(new DateTimeZone($to));
        return $time->format($outputformat);
    }

我从这样的cookie中提供$to参数值:

$calendar->timeZoneConverter($episode->air_date, $_COOKIE['timezone'], "Y-m-d H:i:s")

但是如果未设置cookie,$to参数将返回NULL,尽管我将“America / New_York”设置为默认值

为什么呢? cookie的空值是否会覆盖它?我可以像这样硬编码:

if($to == null){
   $to = "America/New_York";
}

但这似乎有点愚蠢。

1 个答案:

答案 0 :(得分:1)

那是你必须做的。将null传递给可选参数不会导致PHP回退到默认值,它只会使用传递的null

此外,将可选参数放在所需参数列表的中间是没有意义的。如果不将某些值传递给$outputformat,则无法传递必需参数$to

您可以删除默认值,并使用短合并语法来处理null案例:

$time->setTimezone(new DateTimeZone($to ?: 'America/New_York'));