Re: Named arguments revisited
| From: | Jared White | Date: | Wed, 30 Nov 2005 23:16:43 +0000 |
| Subject: | Re: Named arguments revisited | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-20915@lists.php.net to get a copy of this message | ||
On Nov 30, 2005, at 1:50 PM, Andrei Zmievski wrote:
Can you explain your reasoning behind "essential for using PHP as a solid templating language" and "nothing is a good substitute for the real deal"? - AndreiOK, to take an example from Smarty, you could do a value cycle (for multi-row-color tables, etc.) with some extra parameters like so: {cycle name="myCycle" values="#eeeeee;#d0d0d0" print=false reset=true delimiter=";"} (I'm not a Smarty expert, so I apologize if I didn't get that quite right.) Now, if I wanted to express that with a PHP function currently, it might look like this: cycle("myCycle", "#eeeeee;#d0d0d0", false, true, ";"); My question is, what if you have no idea how the cycle function works, or you haven't used it in a while and temporarily forgot? Your two options are look at the source code (if possible) or look at the documentation (if it's any good). Whereas with named arguments, it's self-explanatory. cycle(name: "myCycle", values: "#eeeeee;#d0d0d0", print: false, reset: true, delimiter: ";"); (FYI: I just picked a colon for the heck of it...whatever operator is used isn't important to me.) Much, much clearer and obvious. Perhaps not such a big deal in "regular" PHP code blocks, but in an HTML/PHP mixed template type of scenario, the named arguments are so much nicer. Plus, if they're implemented in an order-agnostic fashion, you could reorder those arguments any way you like -- but I don't necessarily think that's its biggest selling point. Sure, you could use an array for this, like so: cycle(array("name" => "myCycle", "values" => "#eeeeee;#d0d0d0", "print" => false, "reset" => true", "delimiter" => ";")); But not only is that a lot more verbose and messy, but it provides no language features in the function/method definition itself, so you just have to hope the big array that comes in has the right stuff in it. Not ideal. Anyway, I hope that helps, and if you have any other thoughts or questions, please shoot away. Regards, Jared