【发布时间】:2021-10-05 22:39:11
【问题描述】:
我目前正在将一个值(可能为 null)传递给具有该参数默认值的函数。我预计如果参数为空,它将返回默认值。但情况似乎并非如此。 现在我想知道是否有办法解决这个问题?
我知道我可以检查该值是否为空,并且当它为空时不传递它,但我不想在我的代码中有太多的 if。如果默认值为 null,我只想要一种干净的方法来获取默认值。
一些额外信息:我正在使用 Laravel 框架 8 - 也许我还不知道 Laravel 中的一些不错的功能。
例如code:
<?php
class Person {
private $name;
public function greet(string $greeting = 'Hello')
{
return sprintf('%s %s', $greeting, $this->name);
}
public function setName($name)
{
$this->name = $name;
return $this;
}
}
$externalInput = null;
$person = (new Person())->setName('Maik');
echo $person->greet($externalInput);
这只是一个示例代码,所以不要介意这可能存在的安全问题。在我的真实代码中,这一切都得到了照顾。这段代码只是为了说明我遇到的问题。
【问题讨论】:
-
您的意思是您希望
$person->greet(null)给出与$person->greet()和$person->greet('Hello')相同的结果? -
如果参数为null则直接覆盖:
if ($greeting === null) .... -
@ZoliSzabó 这正是我想要的 ;)
-
@wayneOS 我不想这样,所以我正在寻找不同的方式,但感谢您的回答。
-
null与省略具有默认值的参数不同,所以不,您不能在语言级别执行此操作。请参阅下面的@Bart 答案。这是你能得到的最接近的值。
标签: php laravel function default-value