mirror of
https://github.com/php/php-src.git
synced 2026-03-24 08:12:21 +01:00
Fix scope_is_known() for class constants
Here the active_op_array is still the surrounding file, but we do know the scope.
This commit is contained in:
19
Zend/tests/bug69676.phpt
Normal file
19
Zend/tests/bug69676.phpt
Normal file
@@ -0,0 +1,19 @@
|
||||
--TEST--
|
||||
Bug #69676: Resolution of self::FOO in class constants not correct
|
||||
--FILE--
|
||||
<?php
|
||||
class A {
|
||||
const myConst = "const in A";
|
||||
const myDynConst = self::myConst;
|
||||
}
|
||||
|
||||
class B extends A {
|
||||
const myConst = "const in B";
|
||||
}
|
||||
|
||||
var_dump(B::myDynConst);
|
||||
var_dump(A::myDynConst);
|
||||
?>
|
||||
--EXPECT--
|
||||
string(10) "const in A"
|
||||
string(10) "const in A"
|
||||
@@ -1325,14 +1325,10 @@ static inline zend_bool zend_is_scope_known() /* {{{ */
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!CG(active_op_array)->function_name) {
|
||||
/* A file/eval will be run in the including/eval'ing scope */
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!CG(active_class_entry)) {
|
||||
/* Not being in a scope is a known scope */
|
||||
return 1;
|
||||
/* The scope is known if we're in a free function (no scope), but not if we're in
|
||||
* a file/eval (which inherits including/eval'ing scope). */
|
||||
return CG(active_op_array)->function_name != NULL;
|
||||
}
|
||||
|
||||
/* For traits self etc refers to the using class, not the trait itself */
|
||||
|
||||
Reference in New Issue
Block a user