Gå til innhold

endre verdiene til uendelig antall argumenter?


Anbefalte innlegg

Hepp, noen som har fått til dette? Lag en funksjon som tar imot et uendelig antall argument ved referanse, og endre disse verdiene.

 

Demonstrasjon ved et statisk antall argument:

<?php
function doSomething(&$var1,&$var2)
{
  $var1='yo';
  $var2 = 'Hello';
}

$var1 = 'her blir jeg satt';
$var2 = 'me too..';

//$var1 er nå 'yo' og $var2 er 'Hello'
doSomething($var1,$var2);

?>

Men dette krever at jeg spesifiserer hvor mange antall variabler jeg ønsker i funksjonen. Det er viktig at koden funker i php4 såvell som i php5, og da kan ikke dette func_get_args brukes.

array func_get_args ( void )

 

Returns an array in which each element is a copy of the corresponding member of the current user-defined function's argument list. func_get_args() will generate a warning if called from outside of a function definition. This function cannot be used directly as a function parameter. Instead, its result may be assigned to a variable, which can then be passed to the function.

 

    Note: This function returns a copy of the passed arguments only, and does not account for default (non-passed) arguments.

 

Noen ideer?

Endret av dabear
Lenke til kommentar
Videoannonse
Annonse
Hva med at funksjonen bare tar et array som argument?

6556100[/snapback]

Jupp, det er det jeg gjør nå, men skulle funnet en annen løsning..

 

<?php
//tenkt eksempel, disse kommer fks fra post/get
$first = '';
$second ='';
$vals = array_map('quote_smart', array($first, $second));

$templ = 'SELECT * FROM table_name WHERE %s=%s';


$sql = vsprintf($templ, $vals);
// eller

$first = '';
$second ='';

$first = quote_smart($first);
$second= quote_smart($second);


$templ = 'SELECT * FROM table_name WHERE %s=%s';


$sql = sprintf($templ, $first, $second);

?>

 

Det hadde vært enklere om jeg kunne skrevet en funksjon escape som tok imot et uendelig antall med argument, slik at jeg kunne skrevet:

<?php

$first = '';
$second ='';

escape($first, $second /*[,flere..]*/);


$templ = 'SELECT * FROM table_name WHERE %s=%s';


$sql = sprintf($templ, $first, $second);

?>

Jaja, kanskje jeg skulle sjekka at jeg får det jeg vil fra arrayet og deretter slice det og putte innholdet i vsprintf istedet? :p Høres enklere ut..

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...