-
Notifications
You must be signed in to change notification settings - Fork 570
Expand file tree
/
Copy pathbug-9534.php
More file actions
61 lines (53 loc) · 1.25 KB
/
bug-9534.php
File metadata and controls
61 lines (53 loc) · 1.25 KB
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
<?php // lint >= 8.0
declare(strict_types = 1);
namespace Bug9534;
class Car {}
class Bike {}
class Boat {}
final class FinalCar {}
final class FinalBike {}
final class FinalBoat {}
/**
* Non-final classes: match can't be exhaustive because subclasses may exist
*
* @param class-string<Car|Bike|Boat> $string
*/
function accept_class(string $string): void {
match ($string) { // error on this line
Car::class => 'car',
Bike::class => 'bike',
Boat::class => 'boat',
};
}
/**
* Final classes: match IS exhaustive because no subclasses can exist
*
* @param class-string<FinalCar|FinalBike|FinalBoat> $string
*/
function accept_final_class(string $string): void {
match ($string) { // no error
FinalCar::class => 'car',
FinalBike::class => 'bike',
FinalBoat::class => 'boat',
};
}
/**
* Partial match with final classes: should report remaining value
*
* @param class-string<FinalCar|FinalBike|FinalBoat> $string
*/
function partial_final_match(string $string): void {
match ($string) { // error on this line
FinalCar::class => 'car',
};
}
/**
* Partial match with non-final classes
*
* @param class-string<Car|Bike> $string
*/
function partial_match(string $string): void {
match ($string) { // error on this line
Car::class => 'car',
};
}