ID: 45681 Comment by: frase at cs dot wisc dot edu 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:
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. Previous Comments: ------------------------------------------------------------------------ [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=45681&edit=1