1--TEST-- 2Scalar type nullability 3--FILE-- 4<?php 5 6$functions = [ 7 'int' => function (int $i) { return $i; }, 8 'float' => function (float $f) { return $f; }, 9 'string' => function (string $s) { return $s; }, 10 'bool' => function (bool $b) { return $b; }, 11 'int nullable' => function (int $i = NULL) { return $i; }, 12 'float nullable' => function (float $f = NULL) { return $f; }, 13 'string nullable' => function (string $s = NULL) { return $s; }, 14 'bool nullable' => function (bool $b = NULL) { return $b; } 15]; 16 17foreach ($functions as $type => $function) { 18 echo "Testing $type:", PHP_EOL; 19 try { 20 var_dump($function(null)); 21 } catch (TypeError $e) { 22 echo "*** Caught " . $e->getMessage() . PHP_EOL; 23 } 24} 25 26echo PHP_EOL . "Done"; 27?> 28--EXPECTF-- 29Testing int: 30*** Caught {closure}(): Argument #1 ($i) must be of type int, null given, called in %s on line %d 31Testing float: 32*** Caught {closure}(): Argument #1 ($f) must be of type float, null given, called in %s on line %d 33Testing string: 34*** Caught {closure}(): Argument #1 ($s) must be of type string, null given, called in %s on line %d 35Testing bool: 36*** Caught {closure}(): Argument #1 ($b) must be of type bool, null given, called in %s on line %d 37Testing int nullable: 38NULL 39Testing float nullable: 40NULL 41Testing string nullable: 42NULL 43Testing bool nullable: 44NULL 45 46Done 47