2009-10-25 10 views
14

En PHP puede invocar una función. al no llamar a todos los parámetros mediante el uso de estas declaraciones.Usar el valor predeterminado al llamar a una función

function test($t1 ='test1',$t2 ='test2',$t3 ='test3') 
{ 
echo "$t1, $t2, $t3"; 
} 

Y sólo se puede utilizar la función como esta

test(); 

Así que digamos que yo quiero el último en ser diferente, pero no los otros. La única manera de que pueda cosa es al hacer esto sin éxito:

test('test1','test2','hi i am different'); 

yo probamos este:

test(,,'hi i am different'); 
test(default,default,'hi i am different'); 

¿Cuál es la mejor manera de hacer algo como esto?

Respuesta

2

Los parámetros con los valores predeterminados tienen que ser los últimos, después de los demás, en PHP y todos los demás hasta ese punto deben cumplimentarse al llamar a la función. No sé de todos modos para pasar un valor que desencadena el valor predeterminado.

25

Usar grupos:

function test($options = array()) { 
    $defaults = array(
     't1' => 'test1', 
     't2' => 'test2', 
     't3' => 'test3', 
    ); 
    $options = array_merge($defauts, $options); 
    extract($options); 
    echo "$t1, $t2, $t3"; 
} 

llamar a su función de esta manera:

test(array('t3' => 'hi, i am different')); 
+0

Aha, hay que ir! – JAL

+2

Peh, golpéame. Siendo un ejemplo, 'extract' está bien, pero para el uso en el mundo real, no hay necesidad de declarar muchas variables. Solo quería señalar;) – phidah

1

lo que normalmente hago en esas situaciones es especificar los parámetros como una matriz en su lugar. Echar un vistazo al siguiente ejemplo (no probado):

<?php 
test(array('t3' => 'something')); 

function test($options = array()) 
{ 
    $default_options = array('t1' => 'test1', 't2' => 'test2', 't3' => 'test3'); 
    $options = array_merge($default_options, $options); 

    echo $options['t1'] . ', ' . $options['t2'] . ', ' . $options['t3']; 
} 
?> 
10

No se puede hacer que el uso de PHP en bruto. Se puede intentar algo como:

function test($var1 = null, $var2 = null){ 
    if($var1 == null) $var1 = 'default1'; 
    if($var2 == null) $var2 = 'default2'; 
} 

y luego llamar a su función, con null como el identificador de la variable por defecto. También puede usar una matriz con los valores predeterminados, que será más fácil con una lista de parámetros más grande.

Aún mejor es tratar de evitar todo esto, y repensar un poco su diseño.

0

se podría definir como la función:

function grafico($valores,$img_width=false,$img_height=false,$titulo="title"){ 
    if ($img_width===false){$img_width=450;} 
    if ($img_height===false){$img_height=300;} 
    ... 
    } 

y llame a ella sin los parametros duraderos o sustitución de uno o varios con "falsa":

grafico($values); 
grafico($values,300); 
grafico($values,false,400); 
grafico($values,false,400,"titleeee"); 
Cuestiones relacionadas