Hi François,

On Wed, Feb 18, 2015 at 3:02 PM, François Laupretre <franc...@php.net> wrote:
>> De : Andrey Andreev [mailto:n...@devilix.net]
>>
>> Consider the following signature:
>>
>>     function foo(int $bar) {}
>>
>> In the case of a *string* representation of a hexadecimal number, the
>> following would error only on the last iteration with a weak hint, and
>> on the very first if it was a strict hint:
>>
>>     for ($i = 0; $i < 11; $i++)
>>     {
>>         foo(base_convert($i, 10, 16));
>>     }
>
> You're right. An hexa string with no leading '0x' and containing decimal 
> digits only cannot be recognized as hexa. But I keep thinking that, balancing 
> pros and cons, it's not enough to justify strict mode. Maybe I'm wrong and 
> additional use cases will make me change my mind, but I consider hexa with no 
> prefix as an edge-case.
>
> I don't say that's the right solution but the problem can be solved at the 
> base_convert() level. If we support '0x' strings as hexadecimal numbers, it 
> can generate the '0x' prefix, which removes ambiguity for PHP and any other 
> software that would have to interpret the string. Unfortunately, it would 
> probably have to be explicitly required through an option because of BC. No 
> perfect solution here.
>

In real-world applications, base_covert() would hardly ever be the
culprit and I don't want to change its current behavior. I only used
base_convert() in the example because that allowed the least amount of
code written to display the problem.

> Another argument some may consider weak : I'm also afraid that, in your 
> example, the user seeing an error raised by strict mode could change its code 
> to 'foo((int)base_convert', definitely hiding the real bug, even for 11 and 
> up. So, Rasmus is right when he says strict mode can sometimes and indirectly 
> be counter-productive. Debugging shouldn't be considered as error suppression 
> only, but it is the case more than often.
>

Sorry, but I do consider that to be a weak argument ... We can't help
users who's only concern is eliminating error messages, we can only
help those that understand them.

Cheers,
Andrey.

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

Reply via email to