rfc:autofunc

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
rfc:autofunc [2011/08/05 00:35] – future tyraelrfc:autofunc [2011/08/17 20:59] – replace the constants tyrael
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: Draft+  * Status: Under Discussion
   * 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 straigtforward and BC compatible: +The suggested change would be pretty straightforward and BC compatible: 
-  * add a fourth optional parameter for spl_autoload_register called $types with the default value of T_CLASS(this would keep the BC), supported values would be any compination of T_CLASS and T_FUNCTION for now. +  * Add two new constants to spl: SPL_AUTOLOAD_CLASS, SPL_AUTOLOAD_FUNCTION.  
-    * 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 should be the autoloader called. +  * 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. 
-  * the type for the missing token should be also passed to the $autoload_function callback as a second param. +    * 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. 
-    * this is needed to be able to handle multiple types of tokens with a common callback. +  * The type for the missing token should also be passed to the $autoload_function callback as a second param. 
-    * Note that passing more parameter to a function than it has in it'definition is valid, this would be also backward compatible change. +    * This is needed to be able to handle multiple types of tokens with a common callback. 
-  * change the current class autoloading to only call the autoloaders which match with the T_CLASS types. +    * Note that passing more parameters to a function than it has in its definition is valid, this would also be backward compatible change. 
-  * add the function autoloading to only call the autoloaders which match with the T_FUNCTION types.+  * 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 ==== ==== Future improvements ====
  
-Notice that currently only functions are proposed, but we could implement autoloading other tokens(T_CONST?) with this interface.+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 ==== ==== Patch ====
Line 39: 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.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1