What does everyone else think? Are functions/constants inside namespaces
really that critical?
Anyways, I just thought of a possible solution to the namespace
separator issue, and if it's doable, then the double colon (::) can even
be used and no conflicts would occur. It seems the biggest problem with
handling namespaces is determining if a symbol is a class or namespace
at compile-time. I am no expert in flex/bison, but I was thinking that a
state can be used, such as LOOKING_FOR_CLASS_OR_NAMESPACE, which will
return either a T_CLASS_NAME or T_NAMESPACE_NAME token depending on
whether the symbol is known to be a class or namespace. The user will
add either a "using" or "import" statement before the use of the symbol,
and this will allow the parser to know what that symbol is in the
compilation phase. As an example:
// BEGIN CODE
using namespace PEAR::File;
$items = File::Find::glob( '!.*\.php$!', $dir, 'perl' );
// END CODE
The first statement will add an entry into a hashtable (used during
compilation) indicating that "PEAR", "PEAR::File", and "File" are
namespaces ("File" will be imported in the current file only). When
"File::Find::glob" is parsed, the compiler already knows that "File" is
a namespace, so "Find" must be a class inside that namespace, and "glob"
must be a static method. With this, functions and constants can easily
be added inside namespaces, as the "using" or "import" statement will
indicate to the parser which portion of the qualified name is a namespace.
Is this feasible in flex/bison? Let me know if anything needs clarification.
Regards,
Jessie Hernandez
Stefan Walk wrote:
Hi!
If the namespace-approach only covers classes it is implemented
half-heartedly, IMO. I see a lot of "classes" that are just really
collections of static functions, that's what namespaces should cover,
too. And disallowing constants only so that : works is a bad tradeoff...
Regards,
Stefan
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php