You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Eval'd code with static return type wrongly overriden do not show correct message #9407
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:
<?phpclass Request {
publicfunctionduplicate(): static
{
returnnewRequest;
}
}
class TestGenerator {
publicstaticfunctiongenerate(): void
{
$code = <<<PHPclass MockRequest extends Request { public function duplicate(): Request { return new MockRequest; }}PHP;
eval($code);
}
}
TestGenerator::generate();
$b = newMockRequest;
$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.
Activity
cmb69 commentedon Aug 23, 2022
The problem is that
zend_type_to_string_resolved()uses the called scope to resolve thestatictype, and obviously, that isn't correct here.Fix lsp error in eval'd code referring to incorrect class for static …
Fix lsp error in eval'd code referring to incorrect class for static …