Quando passi una variabile alla funzione non passi la variabile stessa ma una sua copia (passaggio per valore). Ciò fa in modo che ogni modifica effettuata nn venga a toccare la variabile originaria. Ed è questo il motivo per cui puoi spippolare quanto ti pare sui parametri d una funzione senza sporcartela al chiamante.
Se vuoi che ogni modifica venga effettuata nella funzione ad variabile passata come parametro venga riscontrata anche quando la funzione cede il controllo al chiamante, devi usare il passaggio per riferimento.
Il passaggio per riferimento si ottiene anteponendo una & al nome del parametro in fase di definizione della funzione:
function nomefunzione(& $var1, &$var2, $var3){
}
ti ho fatto questo esempio per farti capire che non è necessario che TUTTE le variabili siano passate per riferimento o per valore (come accade in vbscript) ma puoi decidere singolarmente per ognuna. In questa funzione ogni volta che modificherai var1 e var2, potrai modificare conservare le loro modifiche anke FUORI dalla funzione, per var3 invece no, e sarai costretto a restituirla con un normalissimo return.