* Jonathan Haddad <[EMAIL PROTECTED]>:
> John Holmes elegantly wrote:
> > From: "Justin French" <[EMAIL PROTECTED]>
> > > I have a few functions with way too many parameters in them, or 
> > > functions which have a non-obvious order of parameters which I 
> > > constantly have to refer to as I'm working.  
<snip>
> > > My main objectives:
> > >
> > >   1.  have all parameters optional
> > >   2.  have a mixed order for the paramaters
<snip>
> > > <? $params = array('a'=>'123','b'=>'456'); echo doStuff($params); ?>
> > > <?=doStuff(array('a'=>'123','b'=>'456'))?>
> > > <?=doStuff('a=123','b=456')?>
> > > <?=doStuff('a','123','b','456'); ?>
> > > <?=doStuff("a='123' b='456'")?>
> > >
> > > So, is that it?  Have I thought of all possible options?

I come from a perl background, which assumes an array is passed to a
subroutine. So, I personally like passing associative arrays to PHP
functions/methods, as this gives me very similar functionality. This
corresponds to the first two examples given by the OP.

However, regarding the following...

> > Have you looked at the "Function Handling Functions"?
> >
> > http://www.php.net/manual/en/ref.funchand.php
<snip>
> OR, if you really wanted to get crazy, you could do it like objective-C.
>
> function blah()
> {
>     // contents
> }
>
> call the function like so
>
> $classobject->function("firstname:jim", "lastname:steve" );
>
> within the function, you could call func_get_args, then map your 
> variables to an array using list($var, $val) = explode( ":", $arg[x] )
>
> of course, if you had a : (colon) in either string that exact solution 
> wouldn't work.  but that's not the point of this lesson. 

Actually, as long as there are no colons in the variable name (key)
portion, you're fine -- simply do:

    list($var, $val) = explode(':', $arg[x], 2);

which limits you to two return values from your explode() statement.
Unfortunately, what you're left with is:

    $args = func_get_args();
    for ($i = 0; $i < count($args); $i++) {
        $list($var, $val) = explode(':', $args[$i], 2);
        $$var = $val;
    }

You could make a function out of the above loop:

    function get_args($args) {
        $arg = array();
        for ($i = 0; $i < count($args); $i++) {
            $list($var, $val) = explode(':', $args[$i], 2);
            $arg[$var] = $val;
        }
        return $arg;
    }

    function do_something() {
        $args = func_get_args(); $args = get_args($args); extract($args);
        // do something now...
    }

But, as you can see, you still end up with a lot of duplication and
chances to go wrong -- for instance, what if you forget to include the
file that has get_args() in it?

This is why I like OOP... :-)

-- 
Matthew Weier O'Phinney           | mailto:[EMAIL PROTECTED]
Webmaster and IT Specialist       | http://www.garden.org
National Gardening Association    | http://www.kidsgardening.com
802-863-5251 x156                 | http://nationalgardenmonth.org

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to