zval params[1];
zval retval;
zend_string *func_name;
- zend_class_entry *called_scope = zend_get_called_scope(EG(current_execute_data));
fci.size = sizeof(fci);
fci.retval = &retval;
if (Z_ISUNDEF(alfi->obj)) {
fci.object = NULL;
fcic.object = NULL;
- if (alfi->ce &&
- (!called_scope ||
- !instanceof_function(called_scope, alfi->ce))) {
- fcic.called_scope = alfi->ce;
- } else {
- fcic.called_scope = called_scope;
- }
+ fcic.called_scope = alfi->ce;
} else {
fci.object = Z_OBJ(alfi->obj);
fcic.object = Z_OBJ(alfi->obj);
--- /dev/null
+--TEST--
+SPL autoloader should not do anything magic with called scope
+--FILE--
+<?php
+
+class Test {
+ public static function register() {
+ spl_autoload_register([Test::class, 'autoload']);
+ }
+
+ public static function autoload($class) {
+ echo "self=" . self::class, ", static=", static::class, "\n";
+ }
+}
+
+class Test2 extends Test {
+ public static function register() {
+ spl_autoload_register([Test2::class, 'autoload']);
+ }
+
+ public static function runTest() {
+ class_exists('FooBar');
+ }
+}
+
+Test::register();
+Test2::register();
+Test2::runTest();
+
+?>
+--EXPECT--
+self=Test, static=Test
+self=Test, static=Test2