Use quite parameter parsing:

if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "lll", &m, &d, &y) != SUCCESS && zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "llllll", &m, &d, &y, &h, &min, &s) != SUCCESS && zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "llllll", &m, &d, &y, &h, &min, &s, &ms) != SUCCESS) {
   php_error(E_WARNING, "Could not parse parameters");
}

Disadvantage is that you will not get the nicely formatted error message and have to do it yourself.

-Andrei
http://10fathoms.org/vu - daily photoblog

On Oct 10, 2007, at 2:55 AM, Scott MacVicar wrote:

if (ZEND_NUM_ARGS() != 3 && ZEND_NUM_ARGS() != 6 && ZEND_NUM_ARGS () != 7) {
        WRONG_PARAM_COUNT;
}

Will let you check that there are 3, 6 and 7 parameters.

Scott
Richard Quadling wrote:
Hi.

From what I understand about the argument list for
zend_parse_parameters(), you separate optional parameters from
mandatory ones using pipe (|).

e.g.

if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll|llll", &m,
&d, &y, &h, &n, &s, &ms) == FAILURE) {

In the above example, this says that there are 3 mandatory parameters
and upto 4 optional parameters.

The prototype for this looks like ...

proto bool myExampleDateFunc(int month, int day, int year, [int hour
[, int min [, int sec [,int msec]]]])

Is there a way to make the prototype ...

proto bool myExampleDateFunc(int month, int day, int year, [int hour,
int min, int sec[, int msec]])

So, making this function accept 3 or 6 or 7 parameters only.

I'm guessing not, but I'm guessing. I think this has to be checked using ...

switch (ZEND_NUM_ARGS()) {

after parsing the parameters and generate an error for ZEND_NUM_ARGS = 4 or 5.

Regards,

Richard.


--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to