php / php/php-src

Hard to figure out from an error message where incompatible method declarations meet

Open
#12,091 6 comments 14 reactions 1 assignee View on GitHub

@derickr is already working on this.

Since Aug 31, 2023.

Feature Status: Needs Triage
Dominant language
C
Stars
40.4k
Forks
8.1k
Avg merge
2d 13h
Merged PRs (30d)
96

Description

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:

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:

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

3v4l.org link: https://3v4l.org/4iOYG

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.