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

Reply via email to