3v4l.org

run code in 300+ PHP versions simultaneously
<?php declare(strict_types=1); class A { } class B extends A { } class C extends B { } class TestA { public function x(C $c):A { return new C(); } } class TestB extends TestA { public function x(B $b):B { return new C(); } } class TestC extends TestB { public function x(A $a): C { return new C(); } } $c = new C(); $testA = new TestA(); $testC = new TestC(); $resultA = $testA->x($c); $resultC = $testC->x($c); var_dump([ 'TestA::x(C): expect C' => get_class($resultA), 'TestC::x(C): expect C' => get_class($resultC), ]); $a = new A(); try { $resultA = $testA->x($a); echo "impossible"; } catch (TypeError $e){ echo "TestA::x(A): expected TypeError\n"; } echo 'TestC::x(A): expect C => '. get_class($testC->x($a));
Output for 7.4.0 - 7.4.33, 8.0.1 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.27, 8.4.1 - 8.4.14, 8.5.0 - 8.5.1
array(2) { ["TestA::x(C): expect C"]=> string(1) "C" ["TestC::x(C): expect C"]=> string(1) "C" } TestA::x(A): expected TypeError TestC::x(A): expect C => C
Output for 8.4.15
/bin/php-8.4.15: /usr/lib/libm.so.6: version `GLIBC_2.38' not found (required by /bin/php-8.4.15) /bin/php-8.4.15: /usr/lib/libm.so.6: version `GLIBC_2.35' not found (required by /bin/php-8.4.15) /bin/php-8.4.15: /usr/lib/libc.so.6: version `GLIBC_2.34' not found (required by /bin/php-8.4.15) /bin/php-8.4.15: /usr/lib/libc.so.6: version `GLIBC_2.38' not found (required by /bin/php-8.4.15)
Process exited with code 1.
Output for 8.3.28
/bin/php-8.3.28: /usr/lib/libm.so.6: version `GLIBC_2.38' not found (required by /bin/php-8.3.28) /bin/php-8.3.28: /usr/lib/libm.so.6: version `GLIBC_2.35' not found (required by /bin/php-8.3.28) /bin/php-8.3.28: /usr/lib/libc.so.6: version `GLIBC_2.34' not found (required by /bin/php-8.3.28) /bin/php-8.3.28: /usr/lib/libc.so.6: version `GLIBC_2.38' not found (required by /bin/php-8.3.28)
Process exited with code 1.

preferences:
167.93 ms | 407 KiB | 5 Q