summaryrefslogtreecommitdiff
path: root/ext/opcache/tests/preload_variance.inc
diff options
context:
space:
mode:
Diffstat (limited to 'ext/opcache/tests/preload_variance.inc')
-rw-r--r--ext/opcache/tests/preload_variance.inc41
1 files changed, 41 insertions, 0 deletions
diff --git a/ext/opcache/tests/preload_variance.inc b/ext/opcache/tests/preload_variance.inc
new file mode 100644
index 0000000000..09f057442c
--- /dev/null
+++ b/ext/opcache/tests/preload_variance.inc
@@ -0,0 +1,41 @@
+<?php
+
+// Requires X, delay to runtime.
+// TODO: It is not actually required, because we don't need X to check inheritance in this case.
+class A extends Z {
+ public function method(X $a) {}
+}
+class B extends Z {
+ public function method($a) : X {}
+}
+
+// Works.
+class C extends Z {
+ public function method($a): self {}
+ public function method2($a): C {}
+}
+class D extends C {
+ public function method($a): self {}
+ public function method2($a): D {}
+}
+
+// Works.
+interface I {}
+interface J extends I {}
+class E {
+ public function method($a): I {}
+}
+class F extends E {
+ public function method($a): J {}
+}
+
+// Requires K & L, delay to runtime.
+class G {
+ public function method($a): K {}
+}
+class H extends G {
+ public function method($a): L {}
+}
+
+// Early-binding preventer.
+class Z {}