Re: [RFC] Stricter type-checks for arithmetic/bitwise operators
| From: | Christoph M. Becker | Date: | Thu, 02 Apr 2020 08:35:28 +0000 |
| Subject: | Re: [RFC] Stricter type-checks for arithmetic/bitwise operators | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-109503@lists.php.net to get a copy of this message | ||
On 02.04.2020 at 10:14, Nikita Popov wrote:
> 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.
>
> 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.
>
> 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).
Thanks! Generally I like that very much. I'm not quite sure, though,
what to do with resource to int conversions. These are documented to be
valid[1], and are sometimes deliberately used[2], and as such it might
be reasonable not to throw on these conversions (maybe even change the
current behavior of the ~ operator). After all, I hope we will be able
to port all resources to objects sometime, and till then we could stick
with more lax semantics.
[1] <https://www.php.net/manual/en/language.types.integer.php>
[2]
<https://www.php.net/manual/en/function.ssh2-sftp.php#refsect1-function.ssh2-sftp-examples>
--
Christoph M. Becker