rfc:autofunc

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
rfc:autofunc [2011/08/05 00:07]
tyrael created
rfc:autofunc [2017/09/22 13:28] (current)
Line 3: Line 3:
   * Date: 2011-08-05   * Date: 2011-08-05
   * Author: Ferenc Kovacs <​tyra3l@gmail.com>​   * Author: Ferenc Kovacs <​tyra3l@gmail.com>​
-  * Status: ​Draftz+  * Status: ​Inactive
   * First Published at: https://​wiki.php.net/​rfc/​autofunc   * First Published at: https://​wiki.php.net/​rfc/​autofunc
  
Line 9: Line 9:
 ===== Introduction ===== ===== Introduction =====
  
-The topic of supporting function autoloading was brought up many times in the past, this RFC tries to introduce ​a potential implementation which would be consistent with what we have for autoloading classes. ​+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 ===== ===== 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 ====
 +<code php>
 + <?​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
 + );
 +</​code>​
 +
 +
 +==== Patch ====
 +
 +Patches welcome! :)
  
 ==== Related RFCs ==== ==== Related RFCs ====
   * [[rfc:​autodefine|RFC __autodefine]]   * [[rfc:​autodefine|RFC __autodefine]]
-  *  
  
 ==== Related discussions ==== ==== Related discussions ====
Line 24: Line 81:
   * [[http://​www.mail-archive.com/​internals@lists.php.net/​msg48820.html]]   * [[http://​www.mail-archive.com/​internals@lists.php.net/​msg48820.html]]
  
 +==== Changelog ====
 + * 2011.08.17 - replace the T_* constants with SPL_AUTOLOAD_*
  
rfc/autofunc.1312502840.txt.gz · Last modified: 2017/09/22 13:28 (external edit)