Alex,

On Wed, Mar 30, 2022 at 7:47 AM Alexandru Pătrănescu <dreal...@gmail.com>
wrote:

> Hey Mark,
>
> On Wed, Mar 30, 2022 at 4:01 PM Mark Niebergall <mbnieberg...@gmail.com>
> wrote:
>
>> Alex,
>>
>> On Tue, Mar 29, 2022 at 10:35 PM Alexandru Pătrănescu <dreal...@gmail.com>
>> wrote:
>>
>>> Hey Mark,
>>>
>>>
>>> On Wed, Mar 30, 2022 at 6:03 AM Mark Niebergall <mbnieberg...@gmail.com>
>>> wrote:
>>>
>>>>
>>>> I have updated the RFC https://wiki.php.net/rfc/typed_class_constants
>>>> with
>>>> more details and examples from this thread, and updated the RFC status
>>>> to
>>>> Under Discussion. Hopefully the updated RFC helps answer questions and
>>>> clarifies what the proposal includes.
>>>>
>>>
>>> Thanks for the RFC and the drive here.
>>> I personally see the benefit and I think it would be a nice addition.
>>>
>>> I think you should also update the "Supported types" section.
>>> Starting with enums, constants can also be objects. Once a good
>>> technical solution is found, any object would be supported probably
>>> https://wiki.php.net/rfc/new_in_initializers#future_scope
>>> I think that only void, never and callable types should not be
>>> supported, just like on properties.
>>>
>>>
>> I have updated the "Supported types" to list out all types that are
>> supported and which types are not supported.
>>
>> Constants cannot be objects since objects are mutable, so typed constants
>> will not be allowed to be an enum (which is technically an object). A typed
>> constant _may_ be an enum value though, so the following example will be
>> valid:
>>
>> ```
>> enum Fruit
>> {
>>     case Apple;
>>     case Banana;
>> }
>>
>> class Colors
>> {
>>     protected const string RED = Fruit::Apple;
>>     protected const string YELLOW = Fruit::Banana;
>> }
>> ```
>>
>
> Actually, Fruit::Apple is an enum instance and that is an object that is
> of Fruit enum type (Fruit class).
> You can check this as it's already possible in PHP 8.1, even if it's not
> yet possible to have them with type: https://3v4l.org/f4WIC
>
> What you are referring to as enum value is actually a backed value for an
> enum instance.
> If you would define the enum as
> ```
> enum Fruit: string
> {
>     case Apple = 'apple';
>     case Banana = 'banana';
> }
> ```
> You could obtain the value with Fruit::Apple->value. But I'm not
> referring to this.
>
> So going back to the topic I mentioned, a constant can right now be an
> object.
> It can be only an enum instance for now but I believe that in the near
> future we will be able to have any object there.
>

Ah yes, you are correct, my mistake. I will need to make some more updates
to the RFC page to address that.


>
> Also, self and parent would make sense for valid typed constants, just
> like they do work on properties.
>

I'll add examples and an item about this as well.


>
> Regards,
> Alex
>
>
>>
>>>
>>>> Of note is the "Inheritance and variance" section, which details uses
>>>> with
>>>> abstracts and interfaces, plus the "Constant values" section which
>>>> includes
>>>> details about errors.
>>>>
>>>>
>>>> >
>>>> > --
>>>> > Guilliam Xavier
>>>> >
>>>>
>>>
>>> Thanks,
>>> Alex
>>>
>>

Reply via email to