Pagine: [1]
Stampa
Autore Discussione: [PHP] Ricevere un numero non definito di argomenti in una funzione  (Letto 2987 volte)
Matrix86
Amministratore
Full Member
*****

Popolarità: +7/-0
Scollegato Scollegato

Messaggi: 133



WWW
« inserito:: Settembre 20, 2009, 15:28:27 »

Alcuni amici mi hanno chiesto di aiutarli con uno script php in cui avevano un problema da risolvere con una funzione, ma i dati di questo problema non erano sempre gli stessi in numero. Cioè per risolvere il problema una volta dovevano essere passati alla funzione 3 argomenti, la volta dopo 5...quindi non era definito un numero base.
La soluzione in PHP a questo problema è molto semplice, infatti il PHP ci mette a disposizione qualche funzione ad-hoc.
- func_get_args() che inserisce tutti gli argomenti passati alla funzione in un array;
- func_num_args() che invece restituisce il numero degli argomenti passati alla funzione;

È quindi molto semplice risolvere questo problema grazie a queste due funzioni, senza incasinarsi passando alle funzioni array o serializzando tutto!

Inserisco di seguito anche un esempio di utilizzo:

Codice:
<?php
var_args
"arg0""arg1""arg2" );
var_args"arg0""arg1""arg2""arg3""arg4""arg5" );

function 
var_args$var ) {
if( ( $ncolumn func_num_args() ) == ) {
echo "Nessun argomento passato!";
return;
}
echo "Numero di valori passati come argomento: ${ncolumn}\n";

$list      func_get_args();  // Inserisce gli argomenti ricevuti in un array;

echo "Mostro tutti gli argomenti ricevuti:\n";
echo "\t0) ${var}\n";          // $var è obbligatoria passarla!
for( $i 1$i $ncolumn$i++ ) {
echo "\t${i}) ".$list[$i]."\n";
}

echo "\n";
return;

?>

Citazione
Numero di valori passati come argomento: 3
Mostro tutti gli argomenti ricevuti:
        0) arg0
        1) arg1
        2) arg2


Numero di valori passati come argomento: 6
Mostro tutti gli argomenti ricevuti:
        0) arg0
        1) arg1
        2) arg2
        3) arg3
        4) arg4
        5) arg5


Matrix86
« Ultima modifica: Settembre 20, 2009, 15:30:31 da Matrix86 » Registrato


Angel_of_Destroy
Jr. Member
**

Popolarità: +1/-0
Scollegato Scollegato

Messaggi: 53



E-mail
« Risposta #1 inserito:: Settembre 20, 2009, 17:17:20 »

Il php mi ha sempre affascinato... (LOVE)
Registrato

Il tempo scorre inesorabile lungo le autostrade della vita..
kSeMuL
Newbie
*

Popolarità: +0/-0
Scollegato Scollegato

Messaggi: 1


E-mail
« Risposta #2 inserito:: Marzo 26, 2010, 16:37:18 »

Bravo matrix ,
Però lo sai che sono polemico a prescindere Felice

Secondo me la soluzione migliore in questo caso sarebbe stata quella di utilizzare dei valori di default se la necessità era la seguente :

function readRow($table , $id_row , $column_name = 'id')

che quindi poteva essere usata nei seguenti modi :

readRow("tabella" , 20 ) ;
readRow("tabella" , 20 , "id_row") ;

Oppure passare un array alla funzione.
Questo aumenta la mantenibilità e documentazione del software a mio avviso.

Funziona in tutti i modi è solo uno stile diverso di scrivere codice.

PS. Sono tornato Linguaccia
Registrato
Matrix86
Amministratore
Full Member
*****

Popolarità: +7/-0
Scollegato Scollegato

Messaggi: 133



WWW
« Risposta #3 inserito:: Marzo 26, 2010, 17:05:21 »

Ciao ksemuldie ^^
Welcome back!
Cmq si la soluzione migliore, nonchè la + adottata, è sicuramente quella di passare un array come parametro alla funzione per questi casi. Infatti adottai quella soluzione, però mi piaceva condividere anche questa possibilità.

Se guardi, alla fine cambia solamente il modo di passare i parametri, poi si ha sempre a che fare con un array e lavora con quello. XD

Grazie per la precisazione, spero di vederti + spesso. Ciauz
Registrato


Pagine: [1]
Stampa
 
Vai a: