Function autoloading through spl_autoload* View as Markdown

Inactive
Authors
Ferenc Kovacs tyra3l@gmail.com
Date
2011-08-05
Version
1.0
Source
wiki.php.net/rfc/autofunc

Discussions on the mailing list

[RFC] Function autoloading through spl_autoload*
by Ferenc Kovacs · 39 messages
Autoload Functions RFC in 5.5?
by Benjamin Eberlei · 1 message
Autoloading functions/consts without a performance impact
by tyson andre · 16 messages

RFC text

Copied from wiki.php.net, last synchronized Oct 13, 2026 11:54 UTC

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

 <?php
 // old behavior
 spl_autoload_register(
  function ($name) {
   // include the class definition
   /* ... */
  }
 );
 
 // autoload functions
 spl_autoload_register(
  function ($name) {
   // include the function definition
   /* ... */
  },
  true,
  false,
  SPL_AUTOLOAD_FUNCTION
 );
 
 // autoload mixed
 spl_autoload_register(
  function ($name, $type) {
   switch($type){
    case SPL_AUTOLOAD_CLASS:
     /* ... */
     break;
    case SPL_AUTOLOAD_FUNCTION:
     /* ... */
     break;      
   }
  },
  true,
  false,
  SPL_AUTOLOAD_CLASS|SPL_AUTOLOAD_FUNCTION
 );

Patch

Patches welcome! :)

Related RFCs

Related discussions

Changelog

* 2011.08.17 - replace the T_* constants with SPL_AUTOLOAD_*