Skip to content

Commit 750bbe7

Browse files
committed
Add class order test cases
The autoload case is supposed to work, but doesn't actually :(
1 parent 2ef3977 commit 750bbe7

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
--TEST--
2+
Returns are covariant, but we don't allow the code due to class ordering
3+
--FILE--
4+
<?php
5+
6+
class A {
7+
public function method() : B {}
8+
}
9+
class B extends A {
10+
public function method() : C {}
11+
}
12+
class C extends B {
13+
}
14+
15+
new C;
16+
17+
?>
18+
--EXPECTF--
19+
Fatal error: Declaration of B::method(): C must be compatible with A::method(): B in %s on line %d
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
--TEST--
2+
Returns are covariant, but we don't allow the code due to class ordering (autoload variation)
3+
--FILE--
4+
<?php
5+
6+
spl_autoload_register(function($class) {
7+
if ($class === 'A') {
8+
class A {
9+
public function method() : B {}
10+
}
11+
} else if ($class == 'B') {
12+
class B extends A {
13+
public function method() : C {}
14+
}
15+
} else {
16+
class C extends B {
17+
}
18+
}
19+
});
20+
21+
$c = new C;
22+
23+
?>
24+
--EXPECTF--
25+
Fatal error: Declaration of B::method(): C must be compatible with A::method(): B in %s on line %d

0 commit comments

Comments
 (0)