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: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> To contact the list administrators, e-mail: [EMAIL PROTECTED]
> 

-- 
Markus Fischer,  http://guru.josefine.at/~mfischer/
EMail:         [EMAIL PROTECTED]
PGP Public  Key: http://guru.josefine.at/~mfischer/C2272BD0.asc
PGP Fingerprint: D3B0 DD4F E12B F911 3CE1  C2B5 D674 B445 C227 2BD0

-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to