Php 检查是否设置了功能参数

Php 检查是否设置了功能参数,php,function,random,parameters,Php,Function,Random,Parameters,我有一个加载蝴蝶图像的函数 有3个可能的参数:颜色、角度和位置 最后一个始终是显式设置的,但前2个(如果未设置)是 用随机数确定的。这意味着除非特别设置,否则该函数将始终加载一只漂亮的随机颜色和角度的蝴蝶 我有这个 function randombf ($randbf,$randangle,$position) { $randbf = rand(1,4); $randangle = rand(1,4); echo '<div class="bf '.$positio

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

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

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

我有这个

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>';
}
但如果我通过了,那就不行了

randombf('1','2','whatever')
它执行随机操作


我做错了什么?

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

省略的参数将设置为
null
(如果需要,您可以指定任何其他内容,但只能指定标量值),因此您只需检查var
是否为null()

函数randombf($position,$randbf=null,$randangle=null){
如果(为空($randbf))$randbf=rand(1,4);
如果(为空($randangle))$randangle=rand(1,4);
回声';
}
让我将@Matt Ball发布的链接合并到我的答案中:


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

  • 不要从函数内部回显,返回结果并从视图或视图相关代码部分回显
  • 写可读的变量和函数名
  • 不要覆盖输入变量,构建新变量
  • 您的函数可以是这样的:

    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;
    
    函数getRandomButterfly($position,$butterfly=null,$angle=null) { if(is_null($butterfly) { $randomButterfly=兰特(1,4); } 其他的 { $trandombutterfly=$butterfly; } 如果(为空($angle) { $randomAngle=兰特(1,4); } 其他的 { $randomAngle=$angle; } $markup= ''; 返回$markup; } $markup=getRandomButterfly(3); echo$加价;
    +1好的方面。通常我对覆盖这么小的函数的输入变量不是很严格,但这只是我自己。是的……这是可以讨论的。函数已经准备好变得更复杂了。每个if都缺少右括号
    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>';
    }
    
    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;