Re: Attributes and strict types
| From: | Sara Golemon | Date: | Fri, 25 Sep 2020 15:19:46 +0000 |
| Subject: | Re: Attributes and strict types | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-111933@lists.php.net to get a copy of this message | ||
On Tue, Sep 22, 2020 at 7:59 AM Nikita Popov <nikita.ppv@gmail.com> wrote:
> I would like to clarify how attributes are supposed to interact with
> strict_types. Consider the following code, split up into three files to
> make it clear that each one could have their own strict_types mode:
>
> MyAttribute.php
> <?php
> #[Attribute]
> class MyAttribute {
> public function __construct(string $a) {}
> }
>
> UseOfMyAttribute.php
> <?php
> declare(strict_types=1);
> #[MyAttribute(42)]
> class Test {}
>
> AccessOfAttribute.php
> <?php
> var_dump((new
> ReflectionClass(Test::class'))->getAttributes()[0]->newInstance());
>
> Currently, what happens is that this code will construct the attribute,
> converting int 42 into string "42", even though UseOfMyAttribute.php has
> strict_types=1.
>
> My intuitive expectation here would be that we should be following the
> strict_types mode of wherever the attribute is being used (i.e.
> UseOfMyAttribute.php, not MyAttribute.php or AccessOfAttribute.php).
> Currently, we always assume strict_types=0.
>
> Is my expectation correct?
>
>
I would say that your expectation is correct, and I'm willing to call the
current behavior a bug. No need to worry about FF here.
-Sara