Skip to content

Eval'd code with static return type wrongly overriden do not show correct message #9407

Closed
@shavounet

Description

@shavounet

Description

This might be only an issue in the error message since I didn't find any issue with a valid eval'd code.
It's quite minor, but I did loose some time trying to understand it :)

The following code:

<?php
class Request {
    public function duplicate(): static
    {
        return new Request;
    }
}

class TestGenerator {
    public static function generate(): void
    {
        $code = <<<PHP
class MockRequest extends Request {
    public function duplicate(): Request
    {
        return new MockRequest;
    }
}
PHP;
        eval($code);
    }
}

TestGenerator::generate();
$b = new MockRequest;
$b->duplicate();

Resulted in this output:

PHP Fatal error:  Declaration of MockRequest::duplicate(): Request must be compatible with Request::duplicate(): TestGenerator in var/test.php(20) : eval()'d code on line 2

But I expected this output instead:

PHP Fatal error:  Declaration of MockRequest::duplicate(): Request must be compatible with Request::duplicate(): static in var/test.php(20) : eval()'d code on line 2

With a correct eval'd code (static return type), I do not have issues.
With a bad not-eval'd code, I do have a correct error message.
I can reproduce it with self and parent return types.

PHP Version

PHP 8.1.9

Operating System

No response

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions