> On 19 Nov 2014, at 08:33, Anatol Belski <anatol....@belski.net> wrote:
> 
> while briefly looking through the conversion examples, i see some weird
> results
> 
> string(5) “31e+7” - shouldn't this be valid for int?

The trend seems to be to consider things with exponents or decimal points as 
floats. Even though there’s a case for supporting it for ints, (int) and 
intval() don’t work with exponents, so to_int() shouldn’t either.

> string(4) “0x10” - hex, but that's int, no?

Supporting hex is a rather obscure use-case. Also, (int) and intval() don’t 
support it.

> string(3) “010” - octal, but that's int, no?

While allowing leading zeroes would be nice, octal causes problems. In 
particular, 0-prefixed strings aren’t handled consistently. Some things deal 
with them as decimal, others deal with them as octal. Because the user’s intent 
isn’t clear, we can’t support them, and I assume this is why 
FILTER_VALIDATE_INT doesn’t support them.

> string(4) “10.0” - this would be casting to 10, so int valid

Allowing .0 for an int doesn’t feel right. What do we do for “10.01”? Reject 
it? That seems rather arbitrary when we would be allowing “10.00”. So it’s not 
accepted.

> object(Stringable)#2 (0) {} - and similar actually, what if _toString()
> returns some int/float literal? that should pass as well, no?

__toString() always errors if it doesn’t return a string, I see no reason to 
change that.

> Generally I'd say no to this RFC. The current casting is not perfect, but
> as for me - the one suggested is highly questionable as well. IMO as long
> as there are no proper strict types in PHP, any other rule set for casting
> would be just another coordinate system for the same, which isn't worth
> while at least.

Something like this RFC is a necessary prerequisite for strict types. Without 
it, there’s not a convenient way to do a safe conversion. If we just add strict 
types, people will blindly use (int) or intval() and magically, garbage input 
will be transformed (through the magic of ignoring everything in the string 
that doesn’t look like an int) into apparently sane input and apps will do 
dangerous things when presented with bad user input.

--
Andrea Faulds
http://ajf.me/





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

Reply via email to