1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
--TEST--
Attributes can deal with AST nodes.
--FILE--
<?php
define('V1', strtoupper(php_sapi_name()));
#[A1([V1 => V1])]
class C1
{
public const BAR = 'bar';
}
$ref = new \ReflectionClass(C1::class);
$attr = $ref->getAttributes();
var_dump(count($attr));
$args = $attr[0]->getArguments();
var_dump(count($args), $args[0][V1] === V1);
echo "\n";
#[A1(V1, 1 + 2, C1::class)]
class C2 { }
$ref = new \ReflectionClass(C2::class);
$attr = $ref->getAttributes();
var_dump(count($attr));
$args = $attr[0]->getArguments();
var_dump(count($args));
var_dump($args[0] === V1);
var_dump($args[1] === 3);
var_dump($args[2] === C1::class);
echo "\n";
#[A1(self::FOO, C1::BAR)]
class C3
{
private const FOO = 'foo';
}
$ref = new \ReflectionClass(C3::class);
$attr = $ref->getAttributes();
var_dump(count($attr));
$args = $attr[0]->getArguments();
var_dump(count($args));
var_dump($args[0] === 'foo');
var_dump($args[1] === C1::BAR);
echo "\n";
#[ExampleWithShift(4 >> 1)]
class C4 {}
$ref = new \ReflectionClass(C4::class);
var_dump($ref->getAttributes()[0]->getArguments());
echo "\n";
#[Attribute]
class C5
{
public function __construct() { }
}
$ref = new \ReflectionFunction(#[C5(MissingClass::SOME_CONST)] function () { });
$attr = $ref->getAttributes();
var_dump(count($attr));
try {
$attr[0]->getArguments();
} catch (\Error $e) {
var_dump($e->getMessage());
}
try {
$attr[0]->newInstance();
} catch (\Error $e) {
var_dump($e->getMessage());
}
?>
--EXPECT--
int(1)
int(1)
bool(true)
int(1)
int(3)
bool(true)
bool(true)
bool(true)
int(1)
int(2)
bool(true)
bool(true)
array(1) {
[0]=>
int(2)
}
int(1)
string(30) "Class "MissingClass" not found"
string(30) "Class "MissingClass" not found"
|