Suggerirei di utilizzare l'array associativo per passare parametri con nome, ma tenerli nell'array senza estrarli.
function myFunc(array $args) {
echo "Hi, " . $args['name'];
// etc
}
Ci sono un paio di motivi per questo. Guardando questa funzione, puoi chiaramente vedere che mi riferisco a uno degli argomenti passati nella funzione. Se li estrai e non ti accorgi dello extract()
tu (o il prossimo ragazzo) sarai lì a grattarti la testa chiedendoti da dove provenisse questa variabile "$name
". Anche se tu fai sai che stai estraendo gli argomenti alle variabili locali, è ancora un gioco di ipotesi fino a un certo punto.
In secondo luogo, garantisce che l'altro codice non sovrascriva gli argomenti. Potresti aver scritto la tua funzione aspettando solo di avere argomenti denominati $foo
e $bar
, quindi nel tuo altro codice, ad esempio, definisci $baz = 8;
. In seguito, potresti voler espandere la tua funzione per prendere un nuovo parametro chiamato "baz" ma dimentica di modificare le altre variabili, quindi indipendentemente da ciò che viene passato negli argomenti, $baz
sarà sempre impostato su 8.
Là sono alcuni vantaggi di utilizzare la matrice troppo (questi valgono anche per i metodi di estrazione o lasciando nella matrice): è possibile impostare una variabile nella parte superiore di ogni funzione chiamata $defaults
:
function myFunc (array $args) {
$default = array(
"name" => "John Doe",
"age" => "30"
);
// overwrite all the defaults with the arguments
$args = array_merge($defaults, $args);
// you *could* extract($args) here if you want
echo "Name: " . $args['name'] . ", Age: " . $args['age'];
}
myFunc(array("age" => 25)); // "Name: John Doe, Age: 25"
si potrebbe anche rimuovere tutti gli articoli da $args
che non hanno un valore $default
corrispondente. In questo modo sai esattamente quali variabili hai.
Bel modo di gestirlo. Mi dispiace non aver letto la tua risposta prima di scrivere la mia. – Rolf