检查是否设置了功能参数

时间:2011-04-22 13:35:35

标签: php function random parameters

我有一个加载蝴蝶图像的功能。

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

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

我有这个

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')

无论如何都执行随机。

我做错了什么?

2 个答案:

答案 0 :(得分:11)

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

省略的参数将设置为null(如果需要,您可以指定其他任何内容,但只能指定标量值),因此您只需要检查var 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 链接已发布到我的回答中:

Default function arguments

答案 1 :(得分:2)

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

  1. 不从函数内回显,返回结果并从视图中回显或查看相关代码部分
  2. 编写可读变量和函数名称
  3. 不要覆盖输入变量,建立新变量
  4. 你的功能看起来像这样:

    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;