Jump to content
Sign in to follow this  
dabear

endre verdiene til uendelig antall argumenter?

Recommended Posts

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?

Edited by dabear

Share this post


Link to post
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..

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...