Hi Nikita,

Nikita Popov wrote:
Hi internals,

I would like to propose making the use of arithmetic/bitwise operators on
arrays, resources and (non-overloaded) objects a TypeError exception:

https://wiki.php.net/rfc/arithmetic_operator_type_checks

This is inspired by some of the recent discussions, in particular the
operator overloading RFC (where the fact that operations on non-overloaded
objects still succeed with just a notice was criticized) and the
increment/decrement RFC, which handles the array case of this proposal for
inc/dec only.

Sounds good!

I think as-is, this RFC should be completely uncontroversial. However,
there is an open question on whether we want to make this slightly more
strict, in order to align the semantics with the rules for weak parameter
type checks for ints/floats.

Regarding that, the RFC says we could “Make non-numeric string operands throwing. Non-numeric here means not starting with a digit (optionally preceded by whitespace). This would not apply to operators that have special behavior for strings, such as string increment.”

I know you used “such as” there, but maybe you should specifically point out the bitwise case. I think increment and the bitwise operators are the only special cases for strings?

If we do that, then this RFC could be a stepping stone towards making
"implicit" internal casts use the (weak) parameter type checking semantics
more generally, which I think would be a good idea. The current explicit
cast semantics we use everywhere are too forgiving for most circumstances
(e.g. an array is almost always not a reasonable input where an integer is
expected).

That would be nice! We currently have essentially three (actually more but these are the big ones) different “weak” behaviours: function arguments and return values, non-comparison operators, and comparisons, and I doubt people who don't follow internals are fully aware of the differences, so it would be good to eventually have just one set of rules.

I guess https://wiki.php.net/rfc/invalid_strings_in_arithmetic was already a step in this direction and your RFC is a further development of it.

Thanks,
Andrea


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

Reply via email to