What about adding a function that behaves like __autoload, but with
respect to namespace wildcards? Something like:
Hi,
Ok so first:
1) We can't implement wildcards since a wildcard needs to be expanded to a
set of concrete classes at runtime for it to make sense, and we don't know
what those classes are (due to autoloads and "conditional" require/include
constructs).
2) There can't be a method to resolve wildcards, since namespaces currently
work 90% at the parse level, before any PHP code has executed. This is
required for good performance and simplicity.
3) I have emailed Greg a simple idea for solving this with a INI-like "meta"
namespace file, a simple file we can put in our include path, which
describes the resources of a namespace and optionally their location.
For example let's say you have namespace My\Name\Space, and inside you have
classes "Foo", "Bar", functions "baz" and constants ONE, TWO. In one of your
include paths, you'll create a file called "My.Name.Space.nsmeta" and put
the following inside:
class Foo = "path\to\Foo.class.php"
class Bar = "path\to\Bar.class.php"
function baz = "path\to\baz.func.php"
const ONE = "\path\to\constants.php"
const TWO = "\path\to\constants.php"
This file you can generate from your framework, or even write by hand, as
you see it's very simple to write/read, and tokenizes with the existing PHP
tokenizer.
Since this file will be read at parse time, it has the ability to solve the
following problems:
1) zero-performance-impact namespace wildcards (especially with an opcode
cache like APC, XCache etc.)
2) faster resource loading (PHP can autoload resources from the location map
above without you writing a slow __autoload runtime procedure)
3) you can load on demand now any namespace resources: class, functions,
constant, not just classes.
Naturally this is not for 5.3 as we all want 5.3 stable and out as soon as
possible. But it has the potential to simplify drastically some workflows,
especially in large complex frameworks, so if it picks up, maybe 5.4, or 6
or who knows.
Regards,
Stan Vassilev
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php