<pre>
This class allows you to emulate calling functions with named
parameters such as in python.
This is useful in situations where a function or method has many optional parameters
and you need to specify only a few. Or one that is at the end of the list.
It uses reflection to do the calls for you.
In all fairness, this is mostly great for functions but a method version has been added
for the sake of it but might be cumbersome in most situations.
For functions,
<code>
NamedParams::Func($function_name, [$arg1], [$arg2], [...]);
</code>
For methods,
<code>
NamedParams::Method($instance_of_class, $method_name [,$arg1] [,$arg2] [,...]);</code>
The arguments list is supplied as a string.
eg. <code>
function Test($one=1, $two=2, $three=3){}
</code>
The argument string for $one will be like: '$one=One' OR 'one=One' OR '$one =One'
The parameter name is on the left and the value on the right
Parameter names are case sensitive.
Anything after the '=' is taken as the value, so blank spaces are recognized
eg. <code>
'$one= One' != '$one=One'
</code>
However, only characters before the '=' are recognized.
Spaces and leading '$' signs are stripped
Use Case:
If we wish to call the function while supplying only the third parameter,
conventionally we will do something like this
<code>
test(1, 2, 567);
</code>
But with Named parameters, we simply call
<code>
NamedParams::func('test', '$three=567');
</code>
This is the same mostly for calling methods
Function Specific:
With functions, we can instantiate the class and call the
given function as a method.
eg.
<code>
$np = new NamedParams;
$np->test('two=change this');
</code>
This method is more compact and does simplifies the calling a lot.
However, it does not work for methods, only functions
<hr> <hr>
<?php
include 'namedparams.class.php';
class TestClass
{
function testMethod($p1, $p2 = 2, $p3 = 3, $p4 = 4, $p5 = 5, $p6 = 6){
var_dump(func_get_args());
}
}
function testFunction($p1, $p2 = 2, $p3 = 3, $p4 = 4, $p5 = 5, $p6 = 6){
var_dump(func_get_args());
}
echo 'Call with only the required parameter ,$p1 <br><br>', 'function <br>';
NamedParams::func('testFunction', '$p1 =required');
echo 'method <br>';
NamedParams::method(new TestClass(), 'testMethod', '$p1 =required');
echo '<hr>';
echo 'Call an optional parameter <br><br>',
'function <br>';
NamedParams::func('testFunction', '$p1 =required', '$p5 =p5');
echo 'method <br>';
NamedParams::method(new TestClass(), 'testMethod', '$p1 =required', '$p4 =p4');
echo '<hr>';
echo 'Mix it up a bit <br><br>',
'function <br>';
NamedParams::func('testFunction', '$p1 =required', '$p5 =p5', '$p2 =p2', '$p4 =p4');
echo 'method <br>';
NamedParams::method(new TestClass(), 'testMethod', '$p1 =required', '$p4 =p4', '$p2 =p2', '$p6 =p6');
echo '<hr>';
|