php - What is the best way of reading parameters in functions? -


i've created several helper functions use when creating templates wordpress. example this:

function the_related_image_scaled($w="150", $h="150", $cropratio="1:1", $alt="", $key="related" ) 

the problem is, if want pass along $alt parameter, have populate $w, $h , $cropratio.

in 1 of plugins, use following code:

function shortcode_display_event($attr) {      extract(shortcode_atts(array(         'type' => 'simple',         'parent_id' => '',         'category' => 'default',         'count' => '10',         'link' => ''     ), $attr));    $ec->displaycalendarlist($data);  } 

this allows me call function using e.g.count=30.

how can achieve same thing in own functions?

solution
name brother (steven_desu), have come solution works.

i added function (which found on net) create value - pair string.

the code looks follows:

// turns string 'intro=mini, read_more=false' value - pair array function pairstr2arr ($str, $separator='=', $delim=',') {     $elems = explode($delim, $str);     foreach( $elems $elem => $val ) {         $val = trim($val);         $nameval[] = explode($separator, $val);         $arr[trim(strtolower($nameval[$elem][0]))] = trim($nameval[$elem][1]);     }         return $arr; }  function some_name($attr) {   $attr = pairstr2arr($attr);    $result = array_merge(array(         'intro' => 'main',         'num_words' => '20',         'read_more' => 'true',         'link_text' => __('read more')     ), $attr);    extract($result);    // $intro no longer contain'main' contain 'mini'   echo $intro; }  some_name('intro=mini, read_more=false') 

info
feedback pekka, googled , found info regarding named arguments , why it's not in php: http://www.seoegghead.com/software/php-parameter-skipping-and-named-parameters.seo

i suggest using array_merge() , extract() @ beginning of function, passing parameters arrays if possibility.

function whatever($new_values){     $result = array_merge(array(         "var1" => "value1",         "var2" => "value2",         "var3" => "value3"     ), $new_values);     extract($result);      echo "$var1, $var2, $var3"; }  whatever(array("var2"=>"new_value")); 

the above output:

value1, new_value, value3 

it's bit sloppy , uses more memory since has allocate arrays, it's less efficient solution. allow avoid redundancy. i'm sure better method exists using magic meta-code, can't think of off-hand.


Comments

Popular posts from this blog

ASP.NET/SQL find the element ID and update database -

jquery - appear modal windows bottom -

c++ - Compiling static TagLib 1.6.3 libraries for Windows -