On 02.04.2020 at 10:47, Nikita Popov wrote:

> On Thu, Apr 2, 2020 at 10:35 AM Christoph M. Becker <cmbecke...@gmx.de>
> wrote:
>
>> 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
>>
>> 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).
>
> While resource to int conversions are indeed valid, they are not exactly
> commonly used, and if they are used, I would expect an explicit (int) cast
> to be involved. I very seriously doubt that someone writing "$x = $y / 2"
> really intended this to mean "$x = resource_id($y) / 2" -- it is much more
> likely that a variable go mixed up. In the unlikely case that that they
> really did intend that, the option of writing "$resourceId = (int) $y; $x =
> $resourceId / 2" remains, and is much clearer.
>
> On that note, I do wonder whether we should introduce a function like
> get_resource_id(), that makes it more explicit that an (int) cast is
> supposed to fetch a resource ID. This is not a very common operation, and I
> suspect that many PHP programmers may not be familiar with the semantics of
> integer casts on resources. Using get_resource_id($file) would make the
> intent clearer relative to (int) $file. This is similar to the recently
> added get_mangled_object_vars() function, which essentially does the same
> as (array) $object, but makes it obvious that you really are interested in
> mangled properties.

I think something like get_resource_id() would be a good addition.

>> 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.
>
> I think that's really an argument to align the behavior of resources and
> objects, as it means one less BC break when resources are converted to
> objects. Historically that's something we did in minor versions, so it's
> good to reduce the amount of semantics that change when such a conversion
> is done.

Good point indeed!

So +1 from me on the RFC.  Not absolutely sure about the open questing
regarding going one step further, but tentatively also +1 on that.

Thanks,
Christoph

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

Reply via email to