====== Request for Comments: Function autoloading through spl_autoload* ====== * Version: 1.0 * Date: 2011-08-05 * Author: Ferenc Kovacs * Status: Inactive * First Published at: https://wiki.php.net/rfc/autofunc ===== Introduction ===== The topic of supporting function autoloading was brought up many times in the past, this RFC introduces a potential implementation which would be consistent with what we have for autoloading classes. ===== Proposal ===== The suggested change would be pretty straightforward and BC compatible: * Add two new constants to spl: SPL_AUTOLOAD_CLASS, SPL_AUTOLOAD_FUNCTION. * Add a fourth optional parameter for spl_autoload_register called $types with the default value of SPL_AUTOLOAD_CLASS (this would keep the BC), supported values would be any combination of SPL_AUTOLOAD_CLASS and SPL_AUTOLOAD_FUNCTION for now. * As you would guess, this would work the same way as the $error_types parameter works for set_error_handler: you can specify for which type(s) of missing tokens the autoloader should be called. * The type for the missing token should also be passed to the $autoload_function callback as a second param. * This is needed to be able to handle multiple types of tokens with a common callback. * Note that passing more parameters to a function than it has in its definition is valid, this would also be a backward compatible change. * Change the current class autoloading to only call the autoloaders which match with the SPL_AUTOLOAD_CLASS types. * Add the function autoloading to only call the autoloaders which match with the SPL_AUTOLOAD_FUNCTION types. ==== Future improvements ==== Notice that currently only functions are proposed, but we could implement autoloading other tokens (SPL_AUTOLOAD_CONSTANT, etc.) with this interface. ==== Examples ==== ==== Patch ==== Patches welcome! :) ==== Related RFCs ==== * [[rfc:autodefine|RFC __autodefine]] ==== Related discussions ==== * [[http://www.mail-archive.com/internals@lists.php.net/msg43983.html]] * [[http://www.mail-archive.com/internals@lists.php.net/msg48986.html]] * [[http://www.mail-archive.com/internals@lists.php.net/msg52287.html]] * [[http://www.mail-archive.com/internals@lists.php.net/msg48820.html]] ==== Changelog ==== * 2011.08.17 - replace the T_* constants with SPL_AUTOLOAD_*