1
0
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:
Nikita Popov
2015-05-21 21:07:05 +02:00
parent f186d4b8b1
commit 3dba00bc31
2 changed files with 22 additions and 7 deletions

19
Zend/tests/bug69676.phpt Normal file
View 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"

View File

@@ -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 */