<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>';
|