This is a "testing of the waters" RFC. If there is interest, it will be followed with a patch. It should be noted that the patch for this has been available through the various vortexes of namespace syntax for over a year now, and it is an extremely simple patch.
[RFC] Implement importing of functions to complement importing of classes and namespaces. example: <?php namespace foo; include 'blah.php'; // defines function bar in namespace oof use function oof\bar; use function \strlen; bar(); // calls oof\bar() $a = strlen('hi'); // calls global function strlen ?> [Problems this solves/Use cases] (1) Readability: * can make code more readable, much like importing classes/namespaces, by shortening line lengths and simplifying complex compound expressions (2) Backwards/Forwards compatibility * Occasionally, an internal function is extended with additional parameters. With function import, this can be accomplished in old versions. Example (pretend parameter "encoding" is added to strlen() in PHP 6.0): <?php namespace Util { function strlen($string, $encoding = 'ISO-8559-1') { $a = phpversion(); if ($a[0] >= 6) { return \strlen($string, $encoding); // use internal implementation } // now for the simulated parameter switch ($encoding) { ... } } } use function Util\strlen; // now code following will work in all PHP versions, and is forward-compatible to PHP 6 ?> [Proposed syntax changes] Function import is accomplished with the keyword "function" (T_FUNCTION token) as in T_USE T_FUNCTION [use_statement] use_statement can be any of \func or nsname\func or \nsname\func Samples: <?php use function \globalfunc; use function nsname\func; use function \nsname\func; ?> Just like the regular implementation of use for classes/namespaces: <?php use function globalfunc; ?> will raise a warning that this has no effect (import in global scope of unqualified name is meaningless). <?php namespace inside\namespace; use function globalfunc; ?> will act like: <?php namespace inside\namespace; use function \globalfunc; ?> [Drawbacks] 1) requires changing the engine near beta 2) adds new syntax to namespaces [Non-issues/Slight issues] 1) would introduce one hash lookup on unqualified function calls at compile-time if any "use" statement exists in the script, which is unlikely to be detectable as a performance difference for even the largest scripts. Thanks, Greg -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php