ID: 45681
Comment by: ganswijk at xs4all dot nl
Reported By: frase at cs dot wisc dot edu
Status: Open
Bug Type: Feature/Change Request
Operating System: Ubuntu 8.04 Hardy
PHP Version: 5.3.0alpha1
New Comment:
What strange that it can only be used on the first line.
That sounds very Fortran/Cobol-like!
I am not very familiar with namespaces yet, but I happened
to study some C# code lately and they seem to have a much
better solution:
namespace name-of-namespace {
code-in-the-name-space
}
Also see:
http://msdn.microsoft.com/en-us/library/z2kcy19k(VS.80).aspx
Previous Comments:
[2008-08-01 16:33:52] frase at cs dot wisc dot edu
Also: This would also eliminate the need for class visibility, as
mentioned in i.e. Bug #44194. By declaring everything in a class
(including the constructor) with the 'namespace' (or lesser) visibility,
nothing outside the namespace could instantiate or access it, so the
class itself would be effectively invisible outside the namespace.
[2008-08-01 16:25:02] frase at cs dot wisc dot edu
Description:
When PHP first introduced visibility, it did not yet have namespaces,
so the only applicable visibility schemes were related to classes --
members were either global (public), or local to the class (private),
possibly including parents and children (protected).
But with the addition of namespaces, there is now a need for a
visibility scope between public and protected. Developers (like me)
will use namespaces to create packages -- collections of classes that
are meant to work closely with each other. In this context, it would be
very convenient to be able to make members visible to other
(unrelated-by-inheritance) classes within the same package (namespace),
but hidden from the world outside the package.
Since the 'namespace' keyword is currently only allowed on the first
line of a file, and therefore could not occur inside a class, I suggest
re-using it for this purpose rather than introducing another reserved
word.
Reproduce code:
---
?php
namespace Test;
class A {
namespace static $nsVar = 'Test::A::nsVar';
static function test() {
echo __CLASS__. can see .A::$nsVar.\n;
}
}
class B {
static function test() {
echo __CLASS__. can see .A::$nsVar.\n;
}
}
Test::A::test();
Test::B::test();
Expected result:
Test::A can see Test::A::nsVar
Test::B can see Test::A::nsVar
Actual result:
--
(syntax error on 'namespace', line 4)
--
Edit this bug report at http://bugs.php.net/?id=45681edit=1