检查函数参数是否设置

6

我有一个加载蝴蝶图片的函数。

有三个可能的参数:颜色角度位置

最后一个总是明确设置的,但如果前两个没有设置,则使用随机数确定。这意味着该函数将始终加载一个漂亮的随机颜色和角度的蝴蝶,除非明确设置。

我有这个:

function randombf ($randbf,$randangle,$position) {
    $randbf = rand(1,4);
    $randangle = rand(1,4);
    echo '<div class="bf '.$position.'" style="background:url(\'images/bf_'.$randangle.'_'.$randbf.'.png\');"></div>';
}

现在我遇到的问题是,只有在没有传递参数的情况下才希望设置随机值。

类似于:

if(!$randbf) {
    $randbf = rand(1,4);
}

但是如果我传递参数,这种方法就行不通了。

randombf('1','2','whatever')

它执行随机操作,无论如何。

我做错了什么?


http://www.php.net/manual/en/functions.arguments.php#functions.arguments.default - Matt Ball
2个回答

13

你应该更改参数的顺序,将位置放在第一位,因为它将始终被指定。如果这样做,你就可以编写randombf(12)randombf(12, 1, 2)甚至是randombf(12, 1)

省略的参数将设置为null(如果你想,你可以指定其他任何东西,但只能是标量值),所以你只需要检查变量是否为is_null()

function randombf ($position, $randbf = null, $randangle = null) {
    if (is_null($randbf)) $randbf = rand(1,4);
    if (is_null($randangle)) $randangle = rand(1,4);
    echo '<div class="bf '.$position.'" style="background:url(\'images/bf_'.$randangle.'_'.$randbf.'.png\');"></div>';
}

让我将@Matt Ball发布的链接纳入我的答案中:

默认函数参数


2

@bazmegakapa所说的关于输入参数顺序以及使第二个和第三个参数变为可选项是正确的。但他没有指出关于你的代码的其他一些重要事情。

  1. 不要在函数内使用echo,返回结果并从视图或与视图相关的代码部分进行echo
  2. 编写易读的变量和函数名称
  3. 不要覆盖输入变量,构建新变量

你的函数可能看起来像这样:

function getRandomButterfly ($position, $butterfly = null, $angle = null) 
{
    if (is_null($butterfly)
    {
        $randomButterfly = rand(1, 4);
    }
    else
    {
        $randomButterfly = $butterfly;
    }

    if (is_null($angle)
    {
        $randomAngle = rand(1, 4);
    }
    else
    {
        $randomAngle = $angle;
    }

    $markup =
    '<div class="bf '.$position.'" style="background:url(\'images/bf_'.$randomAngle.'_'.$randomButterfly.'.png\');"></div>';

    return $markup;
}

$markup = getRandomButterfly(3);
echo $markup;

+1好的观点。通常我不会对覆盖输入变量这样的小型函数那么严格,但那只是我的看法。 - kapa
1
是的...这是可以讨论的。该函数已准备好变得更加复杂。 - markus
你在每个if语句中都缺少闭合括号。 - Michiel van der Blonk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接