This fixes a regression from
16a9bc1ec20533c76ba992bfc64dd69e7b7d9001.
Together with the recent closure related changes this should allow
all usages of self etc, while previously (in PHP 5) some things like
self::class did not work.
--TEST--
-Accessing self::FOO outside a class
+Accessing self::FOO in a free function
--FILE--
<?php
-var_dump(self::FOO);
+function test() {
+ var_dump(self::FOO);
+}
?>
--EXPECTF--
Fatal error: Cannot use "self" when no class scope is active in %s on line %d
--- /dev/null
+--TEST--
+self etc. can be used in eval() in a class scope
+--FILE--
+<?php
+
+class C {
+ const FOO = 1;
+ private static $bar = 2;
+ public static function f() {
+ eval(<<<'PHP'
+var_dump(self::FOO);
+var_dump(self::$bar);
+var_dump(self::class);
+var_dump(static::class);
+PHP
+ );
+ }
+}
+
+C::f();
+
+?>
+--EXPECT--
+int(1)
+int(2)
+string(1) "C"
+string(1) "C"
+
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;