On Tue, Sep 22, 2020 at 7:59 AM Nikita Popov <nikita....@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

Reply via email to