Newsgroup: it.comp.www.php
Titolo: passare parametri alle funzioni sotto forma di array

function xyz($a, $b, $c) {}
 
quindi se si vuole richiamare la funzione:
xyz(1,2,3);
 
Niente di speciale!!!
 
Adesso per� attenzione...
 
args = array(1,2,3);
xyz(args):
 
Lo so, ho appena fatto una cavolata, per� ho dato l'idea di quello che 
voglio fare.
Cio� passare i parametri sotto forma di un array (che potrebbe anche 
essere generato dinamicamente, non sto a specificare i dettagli...), 
invece di specificarli in modo tradizionale...
 
Si pu�?

 Si può?
 
Giusto per chiarezza: la domanda è se si può fare ciò che hai appena 
fatto? In tal caso la risposta è: sì, si può fare e la prova è che l'hai 
appena fatto.
 
Usa gli array associativi e vivi felice, controlla i valori di default.

 appena fatto.
 
non mi pare
 
function xyz($a, $b, $c) {}
$args = array(1,2,3);
xyz($args);
 
Warning: Missing argument 2 for xyz(), called in ... on line 5 and 
defined in ... line 3
Warning: Missing argument 3 for xyz(), called in ... on line 5 and 
defined in ... on line 3
 
 

 defined in ... on line 3
 
ovvio, la funzione xyz() ha 3 parametri non opzionali e questi tre si aspetta.
scrivi la funzione xyz() con un solo parametro, passa un array ($args in questo caso) come parametro alla funzione e poi lavora l'array come vuoi all'interno della stessa.
 
//valorizzazione dell'array
$args = array(
        'id' => 20, 
        'nome' => 'Mario', 
        'cognome' => 'Rossi'
); 
 
xyz($args); //chiamata della funzione 
 
//e questa è la funzione
function xyz($dati) {
//qui puoi leggere i valori dell'array tramite $dati['id'] $dati['nome'] $dati['cognome']
$nomecognome = $dati['nome'] . ' ' . $dati['cognome']; //esempio
}
 

 scrivi la funzione xyz() con un solo parametro, passa un array ($args in questo caso) come parametro alla funzione e poi lavora l'array come vuoi all'interno della stessa.
 
si non ma posso, ne voglio realizzare funzioni con un unico parametro di 
tipo array().
Voglio realizzare una sorta di tester che, alle varie funzioni, passa 
tanti parametri, quanti ne sono richiesti (leggiti il post delle 17.58)

 tanti parametri, quanti ne sono richiesti (leggiti il post delle 17.58)
 
non è quello che hai chiesto in questo post, all'altro non so rispondere ed infatti ho risposto a questo.

 voglio fare.
 
Premesso che stai facendo una cazzata enorme, cercando di forzare un 
linguaggio a quello che vuoi tu, invece di imparare a sfruttarlo per come 
funziona, puoi fare così:
 
function xyz($a, $b=null, $c=null)
{
 if (is_array($a) && count($a) == 3) {
  $c = $a[2];
  $b = $a[1];
  $a = $a[0];
 }
 ...
}
 
Bye.


S�, si pu�:
 
call_user_func_array("xyz",�$args);
 
 

 Si può?
Sì, ma è pessima come pratica
alla funzione passa in firma un oggetto che contenga i valori che ti servono
Se invece vuoi una cosa simile al ... di java (che non mi risulta esista 
in php, e meno male) puoi passare un array di oggetti per poi sbobinarteli
Il vantaggio di passare un oggetto coi parametri è che ti diventa molto 
più pulito il codice e facile da mantenere
 
xyz($myParams){
   if($myParams instanceOf MyParamsClass){
    //fai quello che devi fare
   } else {
    //logga un errore, lancia un'eccezione ...
   }
}
 
con un array è la stessa cosa, solo che l'if lo metti dentro un foreach
 
-- 
I fatti mi cosano


 
cmq io ho chiesto proprio questo.
Avrei potuto spiegarmi meglio, forse si ;)

 }
 
però sono anche riuscito a risolvere così
 
     $refl = new ReflectionClass(new classeTest);
 
     foreach ($refl->getMethods(ReflectionMethod::IS_PUBLIC) as $metod) {
         $name = $metod->getName();
 
         $params = array(
             'values' => array()
         );
 
         foreach ($metod->getParameters() as $param) {
             $params['values'][] = test_value;
         }
 
         call_user_func_array(array($instance, $name), $params['values']);
     }
 
 


 
infatti, dopo nezzoretta di studi, ho scelto questa soluzione

 con un array è la stessa cosa, solo che l'if lo metti dentro un foreach
 
ok grazie, ma ho già trovato l'altra soluzione

 Avrei potuto spiegarmi meglio, forse si ;)
 
ti cito
"Cioè passare i parametri sotto forma di un array (che potrebbe anche 
essere generato dinamicamente, non sto a specificare i dettagli...), 
invece di specificarli in modo tradizionale... 
Si può? "
 
...

 Si pu�? "
 
ok, ho lasciato un po' fraintendere, l'ho ammetto.
Cmq adesso avrai capito cosa intendo, e grazie alle informazioni date 
nell'altro 3d, in un certo qual modo la soluzione l'ho trovata ;)