Clarifying the resolution rules
| From: | Stan Vassilev | FM | Date: | Mon, 27 Oct 2008 11:36:55 +0000 |
| Subject: | Clarifying the resolution rules | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-41437@lists.php.net to get a copy of this message | ||
Hi,
Now that we have a separator, it's time to clarify what happened to the resolution order for
functions and classes, which if I read Greg's messages, is still not clearly defined.
1) I think we've established that autoloading + fallback for classes is unworkable, as it
either causes excessive autoload triggering, or alternatively allows internal classes to override
unloaded but to-be-autoloaded namespaced classes. Then why is it still under consideration?
2) Making the backslash optional for internal functions means popular drop-in replacements for
internal functions and extensions in global space, which work today, will break in a namespace,
examples: libcurlemu. Also check any comments on PECL functions on php.net, and you'll see a
myriad of drop-in replacements people use today.
Also, for those who want to automatically convert their internal functions to backslash prefix for
use in namespaces, you can use this quick snippet I wrote (works in 5.2.x too):
http://pastebin.com/f13125acd
I don't make guarantees it's perfect, but it can be improved and given to people as a
porting aid.
Opinions about how disruptive a mandatory backslash for global symbols *in namespaces* would be, are
welcome. Keep in mind that making the backslash optional will lead to code breakage (such as for
above drop-in replacements, class autoloading etc.) and slower performance (runtime resolution of
function calls).
Think of it as file paths. When you're inside a directory you need to prefix your path with
"/" (eg "\") to refer to the root, but you don't need to do that when
you're in the root directory.
Regards,
Stan Vassilev