parent
fb79fb832c
commit
7f0a8181f5
6 changed files with 160 additions and 7 deletions
@ -0,0 +1,70 @@ |
||||
--TEST-- |
||||
Attribute constructor defaults and arguments preserve backed enum cases |
||||
--FILE-- |
||||
<?php |
||||
|
||||
enum Status: string |
||||
{ |
||||
case Active = 'active'; |
||||
} |
||||
|
||||
#[Attribute(Attribute::TARGET_CLASS)] |
||||
class ValidateStatus |
||||
{ |
||||
public function __construct(public Status $status = Status::Active) |
||||
{ |
||||
} |
||||
} |
||||
|
||||
#[ValidateStatus] |
||||
class ActiveResource |
||||
{ |
||||
} |
||||
|
||||
#[ValidateStatus(Status::Active)] |
||||
class ExplicitActiveResource |
||||
{ |
||||
} |
||||
|
||||
#[ValidateStatus(true ? Status::Active : Status::Active)] |
||||
class ConditionalActiveResource |
||||
{ |
||||
} |
||||
|
||||
function main(): void |
||||
{ |
||||
foreach ([ |
||||
ActiveResource::class, |
||||
ExplicitActiveResource::class, |
||||
ConditionalActiveResource::class, |
||||
] as $class) { |
||||
$attribute = (new ReflectionClass($class))->getAttributes(ValidateStatus::class)[0]; |
||||
$validation = $attribute->newInstance(); |
||||
|
||||
var_dump($attribute->getArguments()); |
||||
var_dump($validation->status === Status::Active); |
||||
var_dump($validation->status->name); |
||||
var_dump($validation->status->value); |
||||
} |
||||
} |
||||
?> |
||||
--EXPECT-- |
||||
array(0) { |
||||
} |
||||
bool(true) |
||||
string(6) "Active" |
||||
string(6) "active" |
||||
array(1) { |
||||
[0]=> |
||||
enum(Status::Active) |
||||
} |
||||
bool(true) |
||||
string(6) "Active" |
||||
string(6) "active" |
||||
array(1) { |
||||
[0]=> |
||||
enum(Status::Active) |
||||
} |
||||
bool(true) |
||||
string(6) "Active" |
||||
string(6) "active" |
||||
Loading…
Reference in new issue