Bug #81573 [Opn->Fbk]: Invalid fatal error regarding mixed return type compatibility
| From: | requinix@php.net | Date: | Sat, 30 Oct 2021 19:32:49 +0000 |
| Subject: | Bug #81573 [Opn->Fbk]: Invalid fatal error regarding mixed return type compatibility | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-237442@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=81573&edit=1
ID: 81573
Updated by: requinix@php.net
Reported by: azjezz at protonmail dot com
Summary: Invalid fatal error regarding mixed return type
compatibility
-Status: Open
+Status: Feedback
Type: Bug
-Package: Compile Failure
+Package: *General Issues
Operating System: N/A
PHP Version: 7.4.25
Block user comment: N
Private report: N
Previous Comments:
------------------------------------------------------------------------
[2021-10-30 18:35:00] hanskrentel at yahoo dot de
> This bug occurs on PHP 7.4, 8.0, and 8.1-dev.
My understanding it that in PHP 7.4 it triggers the autoloader for mixed.
> This shouldn't result in any type of error as
T is a
> sub-type of mixed.
Undefined types have never been a sub-type in PHP. Not in PHP 8.1, 8.0 7.4 or any previous version.
The introduction of the special type "mixed" in PHP 8.0 has not changed that AFAIK.
Compare with a code that demonstrates what establishes a bug on your end with the less special type
stdClass of which any type in PHP userspace is a sub-type of (as we can only defined classes):
<?php
class A {
public function foo(): stdClass { exit(0); }
}
class B extends A {
public function foo(): C { exit(0); }
}
Fatal error: Could not check compatibility between B::foo(): C and A::foo(): stdClass, because class
C is not available in /in/vsMsS on line 8
The behaviour on mixed looks pretty well aligned in my eyes to the standard behaviour, therefore it
would help if you could elaborate why this should be a) different for mixed and b) even qualify as a
bug.
------------------------------------------------------------------------
[2021-10-30 16:02:33] azjezz at protonmail dot com
Description:
------------
This bug occurs on PHP 7.4, 8.0, and 8.1-dev.
when the return type of a method is changed in a sub-class from mixed to T
and T is undefined, you get a fatal error.
This shouldn't result in any type of error as T is a sub-type of
mixed.
reference: https://github.com/revoltphp/event-loop/pull/15/files
Test script:
---------------
<?php
class A {
public function foo(): mixed { exit(0); }
}
class B extends A {
public function foo(): C { exit(0); }
}
Expected result:
----------------
no errors.
Actual result:
--------------
Fatal error: Could not check compatibility between B::foo(): C and A::foo(): mixed, because class C
is not available in /in/k7Jmq on line 8
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=81573&edit=1