> On 9 Mar 2024, at 21:27, Christian Schneider <cschn...@cschneid.com> wrote:
> Am 09.03.2024 um 08:18 schrieb Marc <marc@mabe.berlin>:
>> As the pseudo type `mixed` exists since PHP 8.0, which is already 
>> out-of-date, I have the feeling it would be better to force people to 
>> explicitly write `mixed` to widen the type of an overwritten function and 
>> let "no type" inherit the argument and return type of the parent.
>> 
>> Example:
>> 
>> class A {
>>    public function typed(int $var): int { return $var; }
>>    public function untyped($var) { return $var; } // implicit mixed as no 
>> overwrite
>> }
>> class B extends A {
>>    public function typed($var) { return $var; } // implicit int as inherited 
>> from overwritten function
>> }
> 
> This sounds like a bad idea to me as I cannot look at the function definition 
> in class B and determine what the type of $var is.
> On top of that: If the type of $var in A is changed then it would 
> automatically also change in B. While this seems convenient it could also 
> break B in subtle ways as the function suddenly gets different types than 
> expected.
> 
> Regards,
> - Chris

I guess my discussion with Larry was at least part of what you're referring to.

The proposal here would introduce the same problem as we discussed on the other 
RFC: inconsistency with what people are used to elsewhere in the language (eg 
untyped properties).

It also means that existing code would have the complete opposite effect to 
previously, making it a huge BC break. You'd likely have to have two stages: 
deprecate and then remove use of untyped parameters, and then reintroduce 
untyped to mean "inherited" type, which still suffers from the issues Christian 
pointed out.

I could get behind the "first half" of that process:  making a type required 
(ie deprecating type-less parameters/properties) but I doubt there's enough 
support for that to pass a vote. 

Cheers

Stephen 

Reply via email to