If you use an anonymous function, it will return the object that are expected.spl_autoload_register(function ($myclass){ $keyclass = substr($myclass, 0, 1); switch ($keyclass) { case 'c': if (file_exists("class".DIRECTORY_SEPARATOR.$myclass.".php") === true) require_once ("class".DIRECTORY_SEPARATOR.$myclass.".php"); break; case 'i': if (file_exists("interface".DIRECTORY_SEPARATOR.$myclass.".php") === true) require_once ("interface".DIRECTORY_SEPARATOR.$myclass.".php"); break; case 'a': if (file_exists("abstract".DIRECTORY_SEPARATOR.$myclass.".php") === true) require_once ("abstract".DIRECTORY_SEPARATOR.$myclass.".php"); break; default: if (file_exists($myclass.".php") === true) require_once ($myclass.".php"); }/******************************/var_dump(spl_autoload_functions()) return:array(1) { [0]=> object(Closure)#1 (1) { ["parameter"]=> array(1) { ["$myclass"]=> string(10) "<required>" } }}