[php-src] Issue #12091: Hard to figure out from an error message where incompatible method declarations meet
| From: | ondrejmirtes | Date: | Thu, 31 Aug 2023 14:37:29 +0000 |
| Subject: | [php-src] Issue #12091: Hard to figure out from an error message where incompatible method declarations meet | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-245302@lists.php.net to get a copy of this message | ||
Issue: https://github.com/php/php-src/issues/12091
Author: ondrejmirtes
### Description
When we launch a PHP application, we might get a similar message:
```
Fatal error: Declaration of Baz::getId(): mixed must be compatible with Foo::getId(): int in
/tmp/preview on line 13
```
When we look up the declarations of these methods, we get this:
```php
interface Foo
{
public function getId(): int;
}
abstract class Baz
{
public function getId(): mixed
{
//...
}
}
```
They have nothing in common, their existence on their own shouldn't be a problem for our
application.
The problem is when they meet via a common child that both extends
Baz and implements
Foo:
```php
class Lorem extends Baz implements Foo
{
}
```
The problem is that we don't learn about Lorem from the PHP error message which
makes it really hard to find Loremin a large application.
Personally I solved it by enabling Xdebug in develop mode and looking at the stack
trace. One (or both) of these two things would help to debug this problem in the future:
1) Show fatal error stack trace in PHP out of the box, without requiring Xdebug.
2) Somehow include Lorem too in this error message: Fatal error: Declaration of
Baz::getId(): mixed must be compatible with Foo::getId(): int in /tmp/preview on line 13