2012-06-11 29 views
12

in PHP possiamo passare gli argomenti di default a una funzione in questo modofunzione PHP argomento di default chiamata

function func_name(arg1,arg2=4,etc...) { 

ma alla mia comprensione non possiamo passare una chiamata di funzione per cui questo è illegale:

function func2_name(arg1,arg2=time(),etc...) { 

quindi quando voglio fare un valore di funzione (immagino come la funzione del tempo il valore non può essere conosciuto prima del runtime) Devo fare una specie di lavoro disordinato in questo modo:

function func3_name(arg1,arg2=null,etc...) { 
    if(arg2==null) arg2 = time(); 

Mi chiedevo se qualcuno conosce un modo migliore, un modo più semplice per passare i valori delle chiamate di funzione come argomenti predefiniti in php? Grazie.

C'è anche un motivo fondamentale nella progettazione del linguaggio PHP che non consente le chiamate di funzione come argomenti predefiniti (come fa qualcosa di speciale nella pre-elaborazione?) O potrebbe diventare una funzionalità nelle versioni future?

+2

Questo non mi sembra complicato. – Josh

+1

Dai un'occhiata a [questa domanda simile] (http://stackoverflow.com/questions/8740687/php-function-as-parameter-default) per le alternative. – Quantastical

risposta

13

Bene, la risposta breve è che non esiste un modo migliore per farlo, per quanto ne so. Tuttavia, è possibile renderlo un po 'più ordinato utilizzando operatori ternari.

function func3_name(arg1,arg2=null,etc...) { 
    arg2 = (arg2==null ? time() : arg2); 
} 
+2

penso tu intenda arg2 = (arg2 == null)? time(): arg2; –

2

Connor è corretto al 100%; tuttavia, da PHP 7, ora è possibile utilizzare null coalesce operator.

cioè

$arg2 = $arg2 ?? time(); 

Basta una più breve, probabilmente più pulito, modo di scriverlo.

Problemi correlati