On 08/11/2025 12:43, Rob Landers wrote:
I’d like to introduce an RFC for discussion: https://wiki.php.net/rfc/namespace_visibility which proposes a new visibility modifier: private(namespace).


Hi Rob,

Thanks for putting together the RFC.

My main concern with this and similar single-keyword proposals is that its only useful if people lay out their code in a particular way, rather than fitting with the variety of namespace hierarchies seen in the wild.

For instance, in your example, you have two classes:

- App\Auth\SessionManager
- App\Auth\SessionStore

But if this was library with a set of interchangeable session stores, it might well lay them out like this:

- Acme\AuthLib\Session\Manager
- Acme\AuthLib\Session\Store\SessionStoreInterface
- Acme\AuthLib\Session\Store\DatabaseSessionStore
- Acme\AuthLib\Session\Store\FileSystemSessionStore
- etc

In that case, "current namespace plus children" would work, and I'd be interested in your reasoning for requiring an exact match instead.


But even that might not be enough, if for some reason it looked like this:

- Acme\AuthLib\Services\SessionManager
- Acme\AuthLib\Implementations\SessionStore\SessionStoreInterface
- Acme\AuthLib\Implementations\SessionStore\DatabaseSessionStore
- Acme\AuthLib\Implementations\SessionStore\FileSystemSessionStore
- etc

Here, what we want is visibilty for everything inside "Acme\AuthLib", not only in "Acme\AuthLib\Services".

Since, as you say in another reply, we don't have a standard definition of "module", "package", or "assembly", I think we need a keyword or attribute which takes as a parameter either the namespace prefix, or the number of levels to match.


--
Rowan Tommins
[IMSoP]

Reply via email to