As we learned in the previous section on the
container, there are at least two ways to accept and parse arguments to
PHP functions you write. We will concentrate on the higher-level
zend_parse_parameters( ) function
There are two versions of the function, prototyped like this in C:
int zend_parse_parameters(int num_args TSRMLS_DC, char *type_spec, ...); int zend_parse_parameters_ex(int flags, int num_args TSRMLS_DC, char *type_spec, ...);
They differ only in that the
ex, or expanded, version of the function
flags parameter. The only
flag currently supported is
ZEND_PARSE_PARAMS_QUIET, which inhibits
warnings from supplying an incorrect number or type of arguments.
Both parameter-parsing functions return either
FAILURE. The functions take any number of
extra arguments (pointers to variables whose values are assigned by the
parsing function). On failure the
return_value of the function is automatically
FALSE, so you can simply
return from your function on a failure.
The most complex part of these functions is the
type_spec string you pass them. Here’s the
relevant part of our rot13 example:
char *arg = NULL; int arg_len, argc = ZEND_NUM_ARGS( ); if (zend_parse_parameters(argc TSRMLS_CC, "s/", &arg, &arg_len) == FAILURE) return;
We first get the number of arguments passed to this function by
ZEND_NUM_ARGS( ) macro.
We pass this number along with a
type_spec string of
"s/" and then the address of a
char * and the ...