2011-04-22 12 views
5

Tengo una función que carga una imagen de mariposa.Compruebe si el parámetro de función está configurado

Hay 3 posibles parámetros: de color, ángulo y posición

El último siempre se establece de manera explícita, pero el primero 2, si no se establece, son determinada con un número aleatorio. Esto significa que la función siempre cargará una bonita mariposa aleatoriamente coloreada y en ángulo, a menos que se establezca específicamente.

tengo unas pocas cosas

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

Ahora el problema que tengo es que yo solamente como el azar fijarse si no se pasan los parámetros.

Algo así como:

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

Pero eso no funciona si paso

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

Realiza la aleatoria independientemente.

¿Qué estoy haciendo mal?

+0

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

Respuesta

11

Debe cambiar el orden de los parámetros. Coloque la posición primero porque siempre se especificará. Si lo hace de esta manera, podrá escribir randombf(12) o randombf(12, 1, 2) o incluso randombf(12, 1).

Los parámetros omitidos se configurarán en null (puede especificar cualquier otra cosa si así lo desea, pero solo valores escalares), por lo que solo debe verificar si el 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>'; 
} 

me dejaron incorporar el enlace @ Matt bola ha publicado en mi respuesta:

Default function arguments

2

Lo @bazmegakapa dice sobre el orden de los parámetros de entrada y haciendo que el segundo y el tercer el parámetro opcional es correcto. Pero él no señala algunas otras cosas importantes sobre su código.

  1. no ECHO desde dentro de las funciones, devolver el resultado y el eco que desde su punto de vista o relacionados con vistas partes de código
  2. escribir nombres de variables y funciones legibles
  3. no sobrescribir variables de entrada, construir otras nuevas

Su función podría ser algo como lo siguiente:

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

Ciertamente no quiso decir 'echo $ markup;' :). – kapa

+1

right :) corregido! – markus

+0

+1 Buenos puntos. Normalmente no soy tan estricto sobre la sobreescritura de variables de entrada para una función tan pequeña, pero eso soy solo yo. – kapa

Cuestiones relacionadas