#45681 [Com]: namespace visibility

2008-08-25 Thread ganswijk at xs4all dot nl
 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



#45681 [Com]: namespace visibility

2008-08-01 Thread frase at cs dot wisc dot edu
 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=45681edit=1