Re: * New Parameter Parsing Functions *

From: Date: Tue, 24 Jul 2001 21:20:34 +0000
Subject: Re: * New Parameter Parsing Functions *
References: 1  Groups: php.dev 
Request: Send a blank email to php-dev+get-60901@lists.php.net to get a copy of this message
I see, this coming from PHP-GTK developing ? Can you give an example for a function that takes some fixed parameter (take a resource of some kind as an example) and the next parameter being another resource OR an array of that other resources ? I'm just wondering if I can put this all into a single zend_parse_parameters() or if I'ld need to use some kind of if() statement for this one. - Markus On Tue, Jul 10, 2001 at 10:35:04AM -0500, Andrei Zmievski wrote : > New parameter parsing functions > =============================== > > It should be easier to parse input parameters to an extension function. > Hence, borrowing from Python's example, there are now a set of functions > that given the string of type specifiers, can parse the input parameters > and store the results in the user specified variables. This avoids most > of the IS_* checks and convert_to_* conversions. The functions also > check for the appropriate number of parameters, and try to output > meaningful error messages. > > > Prototypes > ---------- > /* Implemented. */ > zend_parse_parameters(int num_args, char *type_spec, ...); > zend_parse_parameters_ex(int flags, int num_args, char *type_spec, ...); > > /* Not implemented yet. */ > zend_parse_parameters_hash(HashTable *ht, char *type_spec, ...); > zend_parse_parameters_hash_ex(int flags, HashTable *ht, char *type_spec, ...); > > > The zend_parse_parameters() function takes the number of parameters > passed to the extension function, the type specifier string, and the > list of pointers to variables to store the results in. The _ex() version > also takes 'flags' argument -- current only ZEND_PARSE_PARAMS_QUIET can > be used as 'flags' to specify that the function should operate quietly > and not output any error messages. > > The auto-conversions are performed as necessary. Arrays, objects, and > resources cannot be autoconverted. > > > Type specifiers > --------------- > l - long > d - double > s - string (with possible null bytes) and its length > b - boolean, stored in zend_bool > r - resource (stored in zval) > a - array > o - object (of any type) > O - object (of specific type, specified by class entry) > z - the actual zval > > The following characters also have a meaning in the specifier string: > | - indicates that the remaining parameters are optional, they > should be initialized to default values by the extension since they > will not be touched by the parsing function if they are not > passed to it. > / - use SEPARATE_ZVAL_IF_NOT_REF() on the parameter it follows > ! - the parameter it follows can be of specified type or NULL (only applies > to 'a', 'o', 'O', 'r', and 'z'). If > NULL is passed, the results > pointer is set to NULL as well. > > Examples > -------- > /* Gets a long, a string and its length, and a zval */ > long l; > char *s; > int s_len; > zval *param; > zend_parse_parameters(ZEND_NUM_ARGS(), "lsz", &l, &s, &s_len, > &param); > > > /* Gets an object of class specified by my_ce, and an optional double. */ > zval *obj; > double d = 0.5; > zend_parse_parameters(ZEND_NUM_ARGS(), "O|d", &obj, my_ce, &d); > > > /* Gets an object or null, and an array. > If null is passed for object, obj will be set to NULL. */ > zval *obj; > zval *arr; > zend_parse_parameters(ZEND_NUM_ARGS(), "O!a", &obj, &arr); > > > /* Gets a separated array. */ > zval *arr; > zend_parse_parameters(ZEND_NUM_ARGS(), "a/", &arr)); > > > /* Get only the first three parameters (useful for varargs functions). */ > zval *z; > zend_bool b; > zval *r; > zend_parse_parameters(2, "zbr!", &z, &b, &r); > > > /* Get either a set of 3 longs or a string. */ > long l1, l2, l3; > char *s; > if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "lll", > &l1, &l2, &l3)) { > /* manipulate longs */ > } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "s", > &s)) { > /* manipulate string */ > } else { > /* output error */ > } > > Comments and feedback are welcome. > > -Andrei > * If it's never finished, you can't prove it doesn't work. * > > -- > PHP Development Mailing List <http://www.php.net/> > To unsubscribe, e-mail: php-dev-unsubscribe@lists.php.net > For additional commands, e-mail: php-dev-help@lists.php.net > To contact the list administrators, e-mail: php-list-admin@lists.php.net > -- Markus Fischer, http://guru.josefine.at/~mfischer/ EMail: mfischer@guru.josefine.at PGP Public Key: http://guru.josefine.at/~mfischer/C2272BD0.asc PGP Fingerprint: D3B0 DD4F E12B F911 3CE1 C2B5 D674 B445 C227 2BD0

« previous php.dev (#60901) next »