- Output for git.master_jit
- --------------[ TESTCASE ]-------------- string(9) "no-return" Success: without a return statement is always valid. Created uniqueId 1 --------------[ TESTCASE ]-------------- string(15) "no-return-value" Success: a return statement without a value is always valid. Created uniqueId 2 --------------[ TESTCASE ]-------------- string(5) "$this" Dubious: return $this is dubious. - it fullfills the return type, so it could be allowed. - but returning anything from a constructor is nonsense, because it is discarded. As shown by the fourth testcase new SomeTypeError('no-return'). Created uniqueId 3 --------------[ TESTCASE ]-------------- object(ShouldTypeError)#4 (1) { ["uniqueId"]=> int(0) } Error: why is it not a return TypeError? Created uniqueId 4 --------------[ TESTCASE ]-------------- string(11) "Const hello" Error: why is it not a return TypeError? Created uniqueId 5 --------------[ TESTCASE ]-------------- string(3) "abc" Error: why is it not a return TypeError? Created uniqueId 6 --------------[ TESTCASE ]-------------- int(1) Error: why is it not a return TypeError? Created uniqueId 7 --------------[ TESTCASE ]-------------- float(1.23) Error: why is it not a return TypeError? Created uniqueId 8 --------------[ TESTCASE ]-------------- NULL Error: why is it not a return TypeError? Created uniqueId 9 --------------[ TESTCASE ]-------------- bool(true) Success: without a return statement is always valid. Created uniqueId 10 --------------[ TESTCASE ]-------------- bool(false) Error: why is it not a return TypeError? Created uniqueId 11 --------------[ TESTCASE ]-------------- array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" } Error: why is it not a return TypeError? Created uniqueId 12 --------------[ TESTCASE ]-------------- array(4) { ["a"]=> string(1) "a" ["b"]=> string(1) "b" ["c"]=> string(1) "c" [0]=> string(4) "Zero" } Error: why is it not a return TypeError? Created uniqueId 13 --------------[ TESTCASE ]-------------- string(5) "never" Success: throwable: Undefined constant "never" --------------[ TESTCASE ]-------------- string(4) "void" Success: throwable: Undefined constant "void" --------------[ TESTCASE ]-------------- enum(SomeEnum::Spades) Error: why is it not a return TypeError? Created uniqueId 16 --------------[ TESTCASE ]-------------- object(Closure)#6 (3) { ["name"]=> string(22) "{closure:/in/T8rkB:72}" ["file"]=> string(9) "/in/T8rkB" ["line"]=> int(72) } Error: why is it not a return TypeError? Created uniqueId 17 --------------[ TESTCASE ]-------------- object(Closure)#1 (3) { ["name"]=> string(22) "{closure:/in/T8rkB:17}" ["file"]=> string(9) "/in/T8rkB" ["line"]=> int(17) } Error: why is it not a return TypeError? Created uniqueId 18 --------------[ TESTCASE ]-------------- object(Closure)#2 (1) { ["function"]=> string(12) "SomeFunction" } Error: why is it not a return TypeError? Created uniqueId 19 --------------[ TESTCASE ]-------------- object(Closure)#3 (1) { ["function"]=> string(12) "SomeFunction" } Error: why is it not a return TypeError? Created uniqueId 20 --------------[ TESTCASE ]-------------- object(DateTimeImmutable)#7 (3) { ["date"]=> string(26) "2026-01-30 22:42:48.013178" ["timezone_type"]=> int(3) ["timezone"]=> string(16) "Europe/Amsterdam" } Error: why is it not a return TypeError? Created uniqueId 21 --------------[ TESTCASE ]-------------- resource(5) of type (stream) Error: why is it not a return TypeError? Created uniqueId 22
- Output for git.master
- --------------[ TESTCASE ]-------------- string(9) "no-return" Success: without a return statement is always valid. Created uniqueId 1 --------------[ TESTCASE ]-------------- string(15) "no-return-value" Success: a return statement without a value is always valid. Created uniqueId 2 --------------[ TESTCASE ]-------------- string(5) "$this" Dubious: return $this is dubious. - it fullfills the return type, so it could be allowed. - but returning anything from a constructor is nonsense, because it is discarded. As shown by the fourth testcase new SomeTypeError('no-return'). Created uniqueId 3 --------------[ TESTCASE ]-------------- object(ShouldTypeError)#4 (1) { ["uniqueId"]=> int(0) } Error: why is it not a return TypeError? Created uniqueId 4 --------------[ TESTCASE ]-------------- string(11) "Const hello" Error: why is it not a return TypeError? Created uniqueId 5 --------------[ TESTCASE ]-------------- string(3) "abc" Error: why is it not a return TypeError? Created uniqueId 6 --------------[ TESTCASE ]-------------- int(1) Error: why is it not a return TypeError? Created uniqueId 7 --------------[ TESTCASE ]-------------- float(1.23) Error: why is it not a return TypeError? Created uniqueId 8 --------------[ TESTCASE ]-------------- NULL Error: why is it not a return TypeError? Created uniqueId 9 --------------[ TESTCASE ]-------------- bool(true) Success: without a return statement is always valid. Created uniqueId 10 --------------[ TESTCASE ]-------------- bool(false) Error: why is it not a return TypeError? Created uniqueId 11 --------------[ TESTCASE ]-------------- array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" } Error: why is it not a return TypeError? Created uniqueId 12 --------------[ TESTCASE ]-------------- array(4) { ["a"]=> string(1) "a" ["b"]=> string(1) "b" ["c"]=> string(1) "c" [0]=> string(4) "Zero" } Error: why is it not a return TypeError? Created uniqueId 13 --------------[ TESTCASE ]-------------- string(5) "never" Success: throwable: Undefined constant "never" --------------[ TESTCASE ]-------------- string(4) "void" Success: throwable: Undefined constant "void" --------------[ TESTCASE ]-------------- enum(SomeEnum::Spades) Error: why is it not a return TypeError? Created uniqueId 16 --------------[ TESTCASE ]-------------- object(Closure)#6 (3) { ["name"]=> string(22) "{closure:/in/T8rkB:72}" ["file"]=> string(9) "/in/T8rkB" ["line"]=> int(72) } Error: why is it not a return TypeError? Created uniqueId 17 --------------[ TESTCASE ]-------------- object(Closure)#1 (3) { ["name"]=> string(22) "{closure:/in/T8rkB:17}" ["file"]=> string(9) "/in/T8rkB" ["line"]=> int(17) } Error: why is it not a return TypeError? Created uniqueId 18 --------------[ TESTCASE ]-------------- object(Closure)#2 (1) { ["function"]=> string(12) "SomeFunction" } Error: why is it not a return TypeError? Created uniqueId 19 --------------[ TESTCASE ]-------------- object(Closure)#3 (1) { ["function"]=> string(12) "SomeFunction" } Error: why is it not a return TypeError? Created uniqueId 20 --------------[ TESTCASE ]-------------- object(DateTimeImmutable)#7 (3) { ["date"]=> string(26) "2026-01-30 22:42:48.012991" ["timezone_type"]=> int(3) ["timezone"]=> string(16) "Europe/Amsterdam" } Error: why is it not a return TypeError? Created uniqueId 21 --------------[ TESTCASE ]-------------- resource(5) of type (stream) Error: why is it not a return TypeError? Created uniqueId 22
This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.
Active branches
Archived branches
Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page
- 2022-12-01 RFC: Property hooks - included in PHP 8.4
- 2020-03-21 RFC: Is_Literal - declined
- 2020-12-04 Enumerations - included in PHP 8.1
- 2018-06-15 Typed Properties v2 - implemented in PHP 7.4
- 2016-08-12 Object typehint - included in PHP 7.2
- 2016-08-14 Arrow functions - withdrawn
- 2016-05-29 array_change_keys() - withdrawn
- 2016-04-19 Lexical scope support for anonymous classes - suspended
- 2016-04-17 Functional Interfaces - declined
- 2016-03-16 Typed Properties - superseded in favor of Typed Properties 2.0
- 2015-08-27 Callable Prototypes - declined
- 2015-05-01 Short Closures - declined / withdrawn in favor of Arrow Functions
- 2015-02-18 Scalar type hints v5 - included in PHP 7
- 2015-02-14 Union Types - declined
- 2013-09-22 Anonymous classes - included in PHP 7