{
spl_globals->autoload_extensions = NULL;
spl_globals->autoload_functions = NULL;
+ spl_globals->autoload_running = 0;
}
/* }}} */
EG(active_op_array) = original_active_op_array;
EG(function_state_ptr) = original_function_state_ptr;
- if (!found) {
+ if (!found && !SPL_G(autoload_running)) {
zend_throw_exception_ex(spl_ce_LogicException, 0 TSRMLS_CC, "Class %s could not be loaded", class_name);
}
} /* }}} */
}
if (SPL_G(autoload_functions)) {
+ int l_autoload_running = SPL_G(autoload_running);
+ SPL_G(autoload_running) = 1;
class_name_type = Z_TYPE_P(class_name);
class_name_len = Z_UNILEN_P(class_name);
lc_name = zend_u_str_tolower_dup(class_name_type, Z_UNIVAL_P(class_name), class_name_len);
zend_hash_move_forward_ex(SPL_G(autoload_functions), &function_pos);
}
efree(lc_name.v);
+ SPL_G(autoload_running) = l_autoload_running;
} else {
/* do not use or overwrite &EG(autoload_func) here */
zend_call_method_with_1_params(NULL, NULL, NULL, "spl_autoload", NULL, class_name);
ZEND_BEGIN_MODULE_GLOBALS(spl)
char * autoload_extensions;
HashTable * autoload_functions;
+ int autoload_running;
ZEND_END_MODULE_GLOBALS(spl)
#ifdef ZTS
--- /dev/null
+--TEST--
+SPL: spl_autoload() and friends
+--SKIPIF--
+<?php if (!extension_loaded("spl")) print "skip"; ?>
+--INI--
+include_path=.
+--FILE--
+<?php
+
+function my_autoload($name)
+{
+ require $name . '.class.inc';
+ var_dump(class_exists($name));
+}
+
+spl_autoload_register("spl_autoload");
+spl_autoload_register("my_autoload");
+
+$obj = new testclass;
+
+?>
+===DONE===
+<?php exit(0); ?>
+--EXPECTF--
+%stestclass.inc
+%stestclass.class.inc
+bool(true)
+===DONE===