diff options
-rw-r--r-- | Zend/tests/bug69754.phpt | 25 | ||||
-rw-r--r-- | Zend/zend_compile.c | 8 |
2 files changed, 31 insertions, 2 deletions
diff --git a/Zend/tests/bug69754.phpt b/Zend/tests/bug69754.phpt new file mode 100644 index 0000000000..be55ae2b78 --- /dev/null +++ b/Zend/tests/bug69754.phpt @@ -0,0 +1,25 @@ +--TEST-- +Bug #69754 (Use of ::class inside array causes compile error) +--FILE-- +<?php + +class Example { + public function test() { + var_dump(static::class); + var_dump(static::class . 'IsAwesome'); + var_dump(static::class . date('Ymd')); + var_dump([static::class]); + } +} + +(new Example)->test(); + +?> +--EXPECTF-- +string(7) "Example" +string(16) "ExampleIsAwesome" +string(15) "Example%d" +array(1) { + [0]=> + string(7) "Example" +} diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index d1b57c413f..0853dde10b 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -7140,8 +7140,12 @@ void zend_eval_const_expr(zend_ast **ast_ptr) /* {{{ */ zend_ast *name_ast = ast->child[1]; zend_string *resolved_name; - if (zend_try_compile_const_expr_resolve_class_name(&result, class_ast, name_ast, 1)) { - break; + if (zend_try_compile_const_expr_resolve_class_name(&result, class_ast, name_ast, 0)) { + if (Z_TYPE(result) == IS_NULL) { + return; + } else { + break; + } } zend_eval_const_expr(&class_ast); |