/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Funktion med variabelt antal input/output
Fra : Crazy


Dato : 03-08-11 00:46

Hvordan laver man en funktion der har et variabelt antal input og/
eller output? Jeg ved, at man kan sætte default værdier på input, men
det er stadigt begrænset til et vist antal så - altså f.eks.:

function ($var1="", $var2="", $var3="" ....

Kan man ikke have et ubegrænset antal input?
Og hvad gør man med output, hvis man vil have returneret mere end ét
output?

Er arrays sagen (både ved input og output)?

 
 
Bertel Lund Hansen (03-08-2011)
Kommentar
Fra : Bertel Lund Hansen


Dato : 03-08-11 08:31

Crazy skrev:

> Hvordan laver man en funktion der har et variabelt antal input og/
> eller output?

Hvis to betingelser er opfyldt, kan det gøres med initialiserede
parametre:

   function show_info ($content, $color='red', size='normal') {
       blablabla
   }

Den funktion kan kaldes med en, to eller tre parametre. Men
betingelsen er at man aldrig vælger at sætte $size uden også at
sætte $color samt at de præinstallerede værdier altid giver
mening.

Hvis ikke den løsning er gangbar, er der kun array-metoden
tilbage som Birger fortalte dig i går i din første tråd. Det
behøver dog slet ikke været et globalt array.

> Er arrays sagen (både ved input og output)?

Formodentlig.

   function get_info ($inarray,&$outarray) {
       $outarray[0]='konstantinopolitanerinde';
   }

Hvis funktionen kaldes sådan:

   get_info($in,$out);

så vil $out[0] have værdien 'konstantinopolitanerinde' efter
kaldet. Det gælder også selv om det array er lokalt i en anden
funktion.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Martin Larsen (04-08-2011)
Kommentar
Fra : Martin Larsen


Dato : 04-08-11 10:08

Bertel Lund Hansen wrote:

> Hvis ikke den løsning er gangbar, er der kun array-metoden
> tilbage som Birger fortalte dig i går i din første tråd. Det
> behøver dog slet ikke været et globalt array.

Njaa, det rigtige er altså at bruge func_num_args og func_get_args som
jeg foreslog idet kun denne løsning giver mulighed for den syntaks dem
OP spørger efter:

QueryDB("Bananer","Ski","Hest",1,88,21.1);

Altså et variabelt antal parametre skrevet direkte i funktionskaldet.

Indirekte er der dog stadig tale om en array-løsning, den er bare
transparent for brugeren af funktionen.

Lidt være er det med det variable antal returparametre, men en syntaks
meget lig OP's ønske som dette:

$result1,$result2,$result3 = QueryDB(...)

er muligt med list-konstruktionen:

list($result1, $result2, $result3) = QueryDB(...)

Men her er man så nødt til at kende antallet af outputparametre. Ellers
kan man bare arbejde direkte med returarrayet.

Her er et lille program der kommer tæt på OP's ønske. SQL-sætningen
bliver dog ikke udført, i stedet udskriver funktionen sql-sætningen og
returnerer parametrene konverteret til store bogstaver.

<?php
function QueryDB() {
$result = array();
$sql = "SELECT * FROM tabel WHERE ";
for ($i = 0;$i < func_num_args();$i++) {
$sql .= "field$i = '" . func_get_arg($i) . "' AND ";
$result[] = strtoupper(func_get_arg($i));
}
echo "Sql: " . $sql = substr($sql, 0, -5),"\n\n";
return $result;
}

list($result1, $result2, $result3) = QueryDB("tre", "små", "kinesere");
echo "$result1\n$result2\n$result3";
?>



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste