PHP, being a very loosely-typed dynamic language, always allows you to pass any set and any number of arguments to a function or constructor call without error, unless type hints in their definitions aren't met by the arguments passed; for instance, this won't work:
class Test {
public function __construct(array $a, $b, $c, $d) {}
}
// Catchable fatal error: Argument 1 passed to Test::__construct()
// must be an array, string given
$a = new Test('foo', true, false, 18320);
But even then, that's not going to cause a syntax error either — that's a fatal error at runtime.
The closest you can get is to enforce the checks at runtime within the function or method bodies.