Skip to content

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

Closed

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

Activity

  1. cmb69 commented on Aug 23, 2022

    @cmb69
    Member

    The problem is that zend_type_to_string_resolved() uses the called scope to resolve the static type, and obviously, that isn't correct here.

  2. self-assigned this
    on Sep 2, 2022
  3. added 2 commits that reference this issue on Sep 2, 2022
    a25aa64
    d5373ea
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions