Is it deliberate that we are not providing the parameter types for internal functions via reflection? It seems inconsistent:
<?php declare(strict_types=1); function ustrlen(string $str) { } $param_ustrlen = (new ReflectionFunction('ustrlen'))->getParameters()[0]; $param_strlen = (new ReflectionFunction('strlen'))->getParameters()[0]; echo "$param_ustrlen (".$param_ustrlen->hasType().")\n"; echo "$param_strlen (".$param_strlen->hasType().")\n"; try { ustrlen(1); } catch (TypeError $e) { echo $e->getMessage()."\n"; } try { strlen(1); } catch (TypeError $e) { echo $e->getMessage()."\n"; } The output is: Parameter #0 [ <required> string $str ] (1) Parameter #0 [ <required> $str ] () Argument 1 passed to ustrlen() must be of the type string, integer given, called in /home/rasmus/prop.php on line 11 strlen() expects parameter 1 to be string, integer given That is, in both cases a TypeError exception is raised because the type of the parameter is incorrect. But hasType() on the internal function parameter claims there is no type even though there obviously is one. -Rasmus
signature.asc
Description: OpenPGP digital signature