Thi*_*key 44 php type-hinting default-parameters
PHP 5类型提示
PHP 5引入了类型提示.函数现在能够强制参数为对象(通过在函数原型中指定类的名称)或arrays(自PHP 5.1起).但是,如果将ifNULL用作默认参数值,则允许将其作为后续调用的参数.
以下摘录如下:
if NULL用作默认参数值,它将被允许作为任何后续调用的参数.
上述意思是:
如果要使用默认参数,请使用类型提示,它只能具有NULL默认值.
即 code1中的代码是错误的,并导致:
致命错误:具有类类型提示的参数的默认值只能是 NULL
function setName ( string $name = "happ") {
...
}
Run Code Online (Sandbox Code Playgroud)
代码2中的代码是正确的:
function setName ( string $name = NULL) {
...
}
Run Code Online (Sandbox Code Playgroud)
为什么在php中分配了这个约束?
Ale*_*sky 77
你不能输入提示字符串,你只能输入提示对象和数组,所以这是不正确的:
function setName ( string $name = "happ") {
Run Code Online (Sandbox Code Playgroud)
(这里你没有得到编译时错误的原因是因为PHP将"string"解释为类的名称.)
文档中的措辞意味着如果你这样做:
function foo(Foo $arg) {
Run Code Online (Sandbox Code Playgroud)
然后传递给foo()的参数必须是对象Foo的实例.但是如果你这样做:
function foo(Foo $arg = null) {
Run Code Online (Sandbox Code Playgroud)
然后传递给foo()的参数可以是对象Foo的实例,也可以是null.另请注意,如果您这样做:
function foo(array $foo = array(1, 2, 3))
Run Code Online (Sandbox Code Playgroud)
然后你不能调用foo(null).如果您需要此功能,可以执行以下操作:
function foo(array $foo = null) {
if ($foo === null) {
$foo = array(1, 2, 3);
}
Run Code Online (Sandbox Code Playgroud)
[Edit 1]从PHP 5.4开始,您可以输入提示callable:
function foo(callable $callback) {
call_user_func($callback);
}
Run Code Online (Sandbox Code Playgroud)
[Edit 2]由于PHP 7.0,你可以typehint bool,float,int,和string.这使得问题中的代码成为有效的语法.从PHP 7.1开始,您可以输入提示iterable.