WordPress: wp_parse_args()

La funzione wp_parse_args() (come molte altre non documentata) elabora una stringa nel formato:

1
var1=value1&var2=value2...varn=valuen

Questa è una caratteristica molto diffusa nelle funzioni WordPress ed è utile quando una funzione supporta più paramteri. Come indicato in Argomenti variabili e di default in Javascript, Actionscript e PHP, non sarebbe necessario passare i parametri nella modalità var1=value1&var2=value2...varn=valuen, in quanto PHP è in grado di gestire in tutta tranquillità il passaggio di parametri variabili.

Synopsis

1
2
3
4
5
6
7
8
9
10
11
12
/**
 * Merge user defined arguments into defaults array.
 *
 * This function is used throughout WordPress to allow for both string or array
 * to be merged into another array.
 *
 * @since 2.2.0
 *
 * @param    (string|array)    $args Value to merge with $defaults
 * @param    (array)           $defaults Array that serves as the defaults.
 * @return   (array)           Merged user defined values with defaults.
 */

In realtà il primo parametro può essere anche un oggetto. Nel caso passiamo una stringa con i valori separati da ampersen, viene chiamata la funzione WordPress di più basso livello wp_parse_str()

Esempio

Per chiarirne il funzionamento vediamo un esempio. Immaginiamo di dover scrivere una funzione ( myFunc() ) che supporta tre parametri opzionali: par1, par2 e par3. La dichiarazione sarà ovviamente:

1
function myFunc( $args ) {}

Dove è $args sarà la nostra stringa nel formato:

1
var1=value1&var2=value2...varn=valuen

Una possibile chiamata potrebbe essere:

1
myFunc( "par3=ciao&par1=salve" );

Ho inserito di proposito i parametri in un ordine qualsiasi, altra caratteristica che rende il tutto versatile. Vediamo come opera quindi wp_parse_args():

1
2
3
4
5
6
7
function myFunc( $args ) {
    $new_args = wp_parse_args( $args );
    //
    echo $new_args["par1"];
    echo $new_args["par2"];
    echo $new_args["par3"];
}

Chiamando la nostra funzione con myFunc( "par3=ciao&par1=salve" ); scopriremmo che par2 non è impostato! Ed ecco il motivo del secondo parametro della funzione wp_parse_args():

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function myFunc( $args ) {
    $default = array( "par1" => "salve",
                      "par2" => "come",
                      "par3" => "va?" );
    //
    $new_args = wp_parse_args( $args, $default );
    //
    echo $new_args["par1"];
    echo $new_args["par2"];
    echo $new_args["par3"];
}
//
myFunc( "par3=stai&par1=tu" );
// avremmo
// tu
// come
// stai

La comodità di questo approccio è nella possibilità di pre-impostare dei valori di default che vengono utilizzati quando non presenti nella stringa passata come primo parametro.

Perchè usare wp_parse_args()

Tutto questo sarebbe possibile senza utilizzare wp_parse_args() in quanto PHP fornisce già tutte le funzioni per svolgere questo lavoro, vedi ad esempio: parse_str() e array_merge(). Utilizzare wp_parse_args() conviene principalmente per 2 motivi:

  • gestisce per noi il passaggio di un oggetto, un array o una stringa
  • il suo comportamento è modificabile tramite i filtri di WordPress: vedi apply_filters()

4 commenti a: “WordPress: wp_parse_args()”

  1. 05 gen, 2009 Wordpress: wp_parse_args() | Undolog.com:

    [...] la lettura con la fonte di questo articolo:  WordPress: wp_parse_args() | Undolog.com Author: [...]

  2. 05 gen, 2009 Wordpress: wp_parse_args() | Undolog.com:

    [...] approfondire consulta articolo originale: WordPress: wp_parse_args() | Undolog.com Author: [...]

  3. 03 lug, 2009 Undolog.com» Wordpress: usare gli shortcodes:

    [...] a come abbiamo visto in WordPress: wp_parse_args() , la gestione degli attributi è davvero semplice e permette di impostare dei valori di default in [...]

  4. 25 nov, 2011 Giovambattista Fazioli:

    update: WordPress ha aggiornato la documentazione di questa funzione.

Lascia un commento

TAG XHTML PERMESSI: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERIMENTO CODICE:
<pre></pre> // blocco generico
					<code></code> // blocco generico
					[cc_actionscript][/cc_actionscript] // Actionscript
					[cc_actionscript3][/cc_actionscript3] // Actionscript 3
					[cc_css][/cc_css] // CSS Style Sheet
					[cc_html][/cc_html] // HTML
					[cc_js][/cc_js] // Javascript
					[cc_objc][/cc_objc] // Objective-C
					[cc_php][/cc_objc] // PHP
					[cc_sql][/cc_sql] // SQL


Stop SOPA