2009-10-25 13 views
14

In PHP è possibile chiamare una funzione. non chiamando tutti i parametri usando queste istruzioni.Utilizzo del valore predefinito quando si chiama una funzione

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

E si può semplicemente utilizzare la funzione in questo

test(); 

così lascia solo dire che voglio l'ultimo a essere diverso, ma non gli altri. L'unico modo che posso cosa è in questo modo senza successo:

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

ho provato questo:

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

Qual è il modo migliore per fare qualcosa di simile?

risposta

2

I parametri con valori predefiniti devono essere ultimi, dopo gli altri, in PHP e tutti gli altri fino a quel punto devono essere compilati quando si chiama la funzione. Non so comunque di passare un valore che attiva il valore predefinito.

25

utilizzare le matrici:

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

Chiama la funzione in questo modo:

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

Aha, ci siamo! – JAL

+2

Peh, bastonatemi. Essendo un esempio, 'extract' va bene ma per l'uso nel mondo reale, non è necessario dichiarare che molte variabili. Volevo solo notare;) – phidah

1

Cosa faccio di solito in queste situazioni è quello di specificare i parametri come una matrice, invece. Dai un'occhiata al seguente esempio (non testato):

<?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

Non è possibile farlo utilizzando PHP non elaborato. Si può provare qualcosa di simile:

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

e quindi chiamare la funzione, con null come l'identificatore della variabile di default. Puoi anche usare una matrice con i valori predefiniti, che sarà più facile con un elenco di parametri più grande.

Ancora meglio è cercare di evitare tutto questo, e ripensare un po 'il tuo design.

0

si potrebbe definire la funzione come:

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

e chiamare ad esso senza i params duraturi o sostituzione di uno o più con "false":

grafico($values); 
grafico($values,300); 
grafico($values,false,400); 
grafico($values,false,400,"titleeee"); 
Problemi correlati