Then I'm not sure what problem you're trying to solve either. :/ On Thu, Jul 19, 2012 at 12:08 PM, Gustavo Lopes <glo...@nebm.ist.utl.pt>wrote:
> Em Thu, 19 Jul 2012 20:36:45 +0200, Sara Golemon <poll...@php.net> > escreveu: > > > For this type of situation, you could equally go with something like: >> >> zval *val; >> if (zend_parse_parameters(ZEND_**NUM_ARGS() TSRMLS_CC, "n", &val) == >> FAILURE) >> { RETURN_NULL(); } >> >> Where the 'n' type looks for a numeric value: IS_LONG/IS_DOUBLE kept as >> is, IS_STRING/IS_OBJECT (with toString() behavior) converted to >> IS_LONG/IS_DOUBLE if possible, anything else an error. >> > > I don't see how this applies to 'this type of situation' at all (be it the > long-or-null case or the the other example I gave). > > Most commonly one needs either a long or a double, not something that may > be a double or a long. Either because one's wrapping a native method that > takes an integer or a floating point type or because the specific algorithm > being implemented calls for one of them. > > Such a type would certainly be useful in other situations, but it's > irrelevant for the examples I give and similar ones. And in any case, the > specific semantics you proposed are inconsistent with the current > conversion rules, which accept bool and null for numeric types (but yes, > they probably shouldn't). > > > And for methods where a non-numeric string makes sense: >> 'N' type would not error on other types, but pass them through. It would >> differ from the 'z' type only in that IS_STRING/IS_OBJECT would attempt >> to convert to IS_LONG/IS_DOUBLE if possible, but unlike 'n' it wouldn't >> panic. >> >> > Again, I'm not sure which problem we're solving here. We could have a new > type that converts to IS_LONG if the argument is a valid integer, double, > bool, string or even object, leaves at IS_NULL if the argument is null and > fails otherwise. THAT would solve the long-or-null problem. But it would > require new types to extend to booleans and doubles and new type characters > one would have to memorize. We can already query for null-ness with ! and I > think my proposal is consistent with the spirit of the current interface, > so the only point where this alternative would be superior would be in that > it would require one less local variable. > > -- > Gustavo Lopes >