Hi internals,
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?
Regards,
Nikita