On Mon, Jul 16, 2018 at 1:14 PM Nikita Popov <nikita....@gmail.com> wrote:

> On Sun, Jul 15, 2018 at 9:39 PM, Zeljko Mitic <mitke...@gmail.com> wrote:
>
>> PHP is dynamic language and each typed typehinted parameter has to be
>> checked every time. I am suggesting new php.ini value "typecheck.enable =
>> 1" which can be turned off.
>>
>> Example:
>> with default php config, a code like this would check each member of
>> $users
>> array:
>>
>> function demo(User ...$users) {}
>>
>> but with "typecheck.enable = 0", same code would be treated like it was
>> written this way:
>>
>> function demo(...$users) {}
>>
>> Basically, php would simply *ignore* typehints and work like they are not
>> there.
>>
>> It would be programmers responsibility to send correct values but people
>> using typehints are not those still learning the basics.
>>
>> Just like it is programmers responsibility to restart php-fpm when using
>> opcache.validate=0, it would be theirs responsibility to send correct
>> values. Any decent IDE would mark errors for wrong parameter type and with
>> tools like phpstan, it is almost impossible to make one. Only development
>> computers would need to have this checks turned on.
>>
>> This creates no BC problems as it is a new feature. Given that typechecks
>> can be turned off, all existing programs would benefit from extra speed.
>>
>> I am sending this mail by following rules from
>> https://wiki.php.net/rfc/howto . I don't have any knowledge of php
>> internals so unfortunatelly, I can't help with this. I at least hope
>> someone will take this RFC into consideration.
>>
>
> Independently of the question of whether we want to do this at all or not,
> there is a technical difficulty here: While most type checks are just that,
> scalar type checks (in particular in coercive mode) may perform type
> conversions. You pass "42" to a parameter accepting int and the parameter
> will become 42.
>
> Just disabling type checks completely would mean that the function now
> receives "42", which actively violates the type contract (even though the
> code was completely error free with enabled type checks).
>
> How do you propose to handle these cases?
>
> Nikita
>

That is good question, I didn't think of that. I think better solution
would be to only typecheck objects, conversion still happens.

I didn't want to mention the story behind it. I would really like php to
have generics, or at least typed arrays. I recently read that someone tried
to implement typed array and got 15% slow-down; I am sorry I can't provide
link, reddit is just to big place :)

So if speed is major problem of advancing towards generics/typed arrays, I
think this optional feature would solve it. Programmer would still spot
problem on dev computers where speed is not relevant.

I hope I explained this correctly, english is not my first language.

Reply via email to