2020-09-22 14:51 GMT, guilhermebla...@gmail.com <guilhermebla...@gmail.com>: > This should answer your question: > https://github.com/php/php-src/pull/947#issuecomment-224912697 >
Yes, indeed. "The reason comes due to how namespaces are implemented in the language, where they only exist at compile time." Pity. > On Tue, Sep 22, 2020 at 7:38 AM Olle Härstedt <olleharst...@gmail.com> > wrote: >> >> 2020-09-21 21:50 GMT, Rowan Tommins <rowan.coll...@gmail.com>: >> > On 21/09/2020 17:13, Michael Morris wrote: >> >> Next thing to consider - we have the problem of having already used >> >> the >> >> protected keyword in PHP, and honestly I prefer PHP's interpretation >> >> of >> >> the >> >> word. >> > >> > >> > I think it's actually Java that's the outlier here: PHP's meaning of >> > "protected" corresponds directly to C++, and to name a few I came upon >> > in a quick search it's also used that way by Kotlin [1], Scala [2], C# >> > [3] and Oxygene [4] - all of which use other ways to signal package >> > visibility: >> > >> > - Kotlin has a fourth visibility, "internal", meaning "public within >> > this module" >> > - Scala has an interesting syntax where you can modify the visibility >> > with the name of a package, as in "private[SomePackage]" >> > - C# adds *three* extra visibility modes: "internal", "internal >> > protected", and "private protected" >> > - Oxygene (a language I know next to nothing about) apparently has no >> > fewer than TEN modes, including both "assembly or protected" and >> > "assembly and protected" >> > >> > >> > All of which I think shows two things: firstly, that there are lots of >> > different ways to express this concept; and secondly, that there are a >> > lot of subtle combinations that might be useful. >> > >> > The C# list is particularly confusing, presumably because it's evolved >> > without a coherent plan. If I'm understanding correctly, C#'s "private >> > protected" corresponds to Oxygene's much clearer "assembly and >> > protected", while "protected internal" corresponds to "assembly or >> > protected". Considering those combinations up front might be sensible, >> > even if they're not implemented at once. >> > >> > >> > If we're considering using namespaces rather than a new package concept >> > for this, we potentially have a third dimension: is it private to _this >> > exact namespace_, or any "child" namespace starting with the same >> > prefix? Maybe something like Scala's modifier syntax might be more >> > useful, for instance: >> > >> > namespace Acme\Frobulator\Helpers\File; >> > class FileWidget { >> > private[namespace] $foo; // accessible specifically in the >> > "Acme\Frobulator\Helpers\File" namespace >> > private[Acme\Frobulator\Helpers\File\*] $bar; // accessible in >> > this >> > namespace, and all sub-namespaces >> > private[Acme\Frobulator\*] $baz; // accessible in >> > "Acme\Frobulator" >> > and all its sub-namespaces >> > } >> > >> > >> > [1] https://kotlinlang.org/docs/reference/visibility-modifiers.html >> > [2] https://www.tutorialspoint.com/scala/scala_access_modifiers.htm >> > [3] >> > https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers >> > [4] >> > https://docs.elementscompiler.com/Oxygene/Members/VisibilityLevels/structs/access-modifiers >> > >> > >> > Regards, >> > >> > -- >> > Rowan Tommins (né Collins) >> > [IMSoP] >> > >> > -- >> > PHP Internals - PHP Runtime Development Mailing List >> > To unsubscribe, visit: https://www.php.net/unsub.php >> > >> > >> >> All good ideas, but I still don't know if PHP is aware of current >> namespace at all time? Anyone has this knowledge? It's a precondition >> to check namespace access. >> >> Olle >> >> -- >> PHP Internals - PHP Runtime Development Mailing List >> To unsubscribe, visit: https://www.php.net/unsub.php >> > > > -- > Guilherme Blanco > SVP Technology at Statflo Inc. > Mobile: +1 647 232 5599 > -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: https://www.php.net/unsub.php