Hi Benjamin,

On Tue, June 9, 2020 at 6:55 AM Benjamin Eberlei wrote:

> Larry's suggestion about `#[Attr]` makes an important argument about
> allowing to declare attributes in code in PHP 7 in a forward compatible
> way that has not been brought up before.
>
> ```php
> /** @ORM\Entity */
> #[ORM\Entity]
> class User {}
> ```
>
> This code would work on PHP 7 and 8.

That's an interesting argument. After thinking about it more, though,
I'm not sure I understand what the benefit would be. The docblock
annotation needed for PHP 7 is *already* forward compatible with PHP 8.
So wouldn't this just be duplicating the attribute and opening the
possibility for them to be out of sync for no benefit?

Rather than duplicating attributes, wouldn't libraries simply stick
with docblock annotations until they need to depend on other PHP 8
features anyway (e.g. union types), and then switch completely to the
native attribute syntax?

Furthermore, even if there was some benefit to having an attribute in
both docblock and native syntaxes, it seems like this is a very short
term concern. In a few years once libraries are depending on other
PHP 8 features, will this even matter anymore? So I'm really not
convinced that this forward compatibility argument should influence
the syntax choice.

> The `#[]` syntax would have about equally low breaking potential as `@@`.

Is this really the case? There's no benefit to adding extra suppression
operators, but I have seen code in the wild using hash comments starting
with an opening bracket (e.g. to comment out an array, or for making
checkboxes like `#[x] Some comment here`).

> As such, instead of going through each alternative syntax one by one,
> with with each having a 2/3 requirement to overthrow the old one,
> I would be open to restart the secondary vote on Attributes syntax
> with `<<>>` (status quo), `@@` and `#[]` using the same ranked voting
> algorithm that was used for the PHP 8 RM vote.

I'm certainly open to holding a three-way ranked choice vote like
this, if others are okay with it.

> I would take on the work to write about the third syntax alternative
> then. The VoteRFC could just link to the three individual RFCs where
> each discusses their syntax.

I added a section to the Shorter Attribute Syntax RFC discussing the
pros and cons of the `#[]` syntax. Let me know if you feel it isn't
worded fairly. I think it would be preferable to have the syntax
choices and voting options presented in one document rather than
spread out in different places if possible.

Best regards,  
Theodore

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to