2011-04-22 2 views
5

나비 이미지를로드하는 함수가 있습니다.함수 매개 변수가 설정되어 있는지 확인하십시오.

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

를 전달하는 경우

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

는하지만 작동하지 않습니다.

내가 뭘 잘못하고 있니?

+0

http://www.php.net/manual/en/functions.a rguments.php # functions.arguments.default –

답변

11

매개 변수의 순서를 변경해야합니다. 위치가 항상 지정되므로 먼저 위치를 지정하십시오. 이렇게하면 randombf(12) 또는 randombf(12, 1, 2) 또는 randombf(12, 1)으로 쓸 수 있습니다.

생략 된 매개 변수는 null으로 설정됩니다 (원하는 경우 다른 값을 지정할 수 있지만 스칼라 값만 지정할 수 있음). 따라서 변수가 is_null()인지 확인해야합니다.

Default function arguments

2

당신의 입력 매개 변수의 순서와 두 번째와 세 번째를 만드는 방법에 대한 말씀 @bazmegakapa :

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>'; 
} 

@ 매트 볼 내 대답에 게시 한 링크를 통합 할 수 매개 변수는 선택 사항입니다. 그러나 그는 코드에 대한 몇 가지 중요한 사항을 지적하지 않습니다.

  1. 구축, 결과를 반환하고
  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; 
+0

분명히'echo $ markup;'을 의미하지는 않았습니다. – kapa

+1

오른쪽 :) 수정! – markus

+0

+1 좋은 지적. 일반적으로 나는 그런 작은 함수에 대한 입력 변수를 덮어 쓰는 것에 대해 그렇게 엄격하지는 않습니다. 그러나 그것은 저뿐입니다. – kapa

관련 문제