Skip to content

Commit 580c29e

Browse files
committed
Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1: Fix lsp error in eval'd code referring to incorrect class for static type
2 parents a85c757 + 15ee9d2 commit 580c29e

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

Zend/tests/gh9407.phpt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
--TEST--
2+
GH-9407: LSP error in eval'd code refers to wrong class for static type
3+
--FILE--
4+
<?php
5+
6+
class A {
7+
public function duplicate(): static {}
8+
}
9+
10+
class C {
11+
public static function generate() {
12+
eval(<<<PHP
13+
class B extends A {
14+
public function duplicate(): A {}
15+
}
16+
PHP);
17+
}
18+
}
19+
20+
C::generate();
21+
22+
?>
23+
--EXPECTF--
24+
Fatal error: Declaration of B::duplicate(): A must be compatible with A::duplicate(): static in %s : eval()'d code on line %d

Zend/zend_compile.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1259,7 +1259,8 @@ zend_string *zend_type_to_string_resolved(zend_type type, zend_class_entry *scop
12591259
}
12601260
if (type_mask & MAY_BE_STATIC) {
12611261
zend_string *name = ZSTR_KNOWN(ZEND_STR_STATIC);
1262-
if (scope) {
1262+
// During compilation of eval'd code the called scope refers to the scope calling the eval
1263+
if (scope && !zend_is_compiling()) {
12631264
zend_class_entry *called_scope = zend_get_called_scope(EG(current_execute_data));
12641265
if (called_scope) {
12651266
name = called_scope->name;

0 commit comments

Comments
 (0)