types提示:默认参数
types提示
PHP 5引入了Type Hinting。 函数现在可以强制参数成为对象(通过在函数原型中指定类的名称)或数组(自PHP 5.1起)。 但是,如果将NULL用作默认参数值,则可以将其作为任何稍后调用的参数。
以上摘录如下:
如果将NULL用作默认参数值,则将允许其作为任何稍后调用的参数。
以上是否意味着:
如果要使用缺省参数并使用types提示,则只能使用NULL作为缺省值。
即代码1中的代码是错误的,并导致:
致命错误:具有types提示的参数的默认值只能为NULL
代码1:
function setName ( string $name = "happ") { ... }
代码2中的代码是正确的:
码2:
function setName ( string $name = NULL) { ... }
为什么这个约束在PHP中分配?
您不能键入提示string,只能键入提示对象和数组,所以这是不正确的:
function setName ( string $name = "happ") {
(你在这里没有得到编译时错误的原因是因为PHP正在将“string”解释为一个类的名字。)
文档中的措辞意味着如果你这样做:
function foo(Foo $arg) {
然后传递给foo()的参数必须是对象Foo的一个实例。 但是,如果你这样做:
function foo(Foo $arg = null) {
那么传递给foo()的参数可以是对象Foo的一个实例,也可以是null。 还要注意,如果你这样做:
function foo(array $foo = array(1, 2, 3))
那么你不能调用foo(null)。 如果你想要这个function,你可以这样做:
function foo(array $foo = null) { if ($foo === null) { $foo = array(1, 2, 3); }
编辑:从PHP 5.4起,还可以键入可调用对象:
function foo(callable $callback) { call_user_func($callback); }
这是编译时间与运行时间值的关系。 在编译时,只允许文字值(string,数字,布尔值和NULL)。 PHP处理器此时无法知道所有可能的类,因此无法在函数参数中创build对象的实例。
我期望的是,通常将NULL传递给一个types的提示函数会抛出exception/错误。 如果将默认值设置为NULL,则在传递NULL时不会抛出此exception。 我没有testing过,只是我所期望的。
您不能键入string,只能键入对象和数组。
真?
所以,看看这个: https : //gist.github.com/qeremy/cd5de6397dd732751fec
@ThinkingMonkey; 如果您愿意,可以随时用这种方式使用它,但只能将NULL
作为默认值传递。
function foo(int $x, float $y) { print $x * $y; } foo(3, 1.5); foo(3, 1); // boom! class User { public function theName(string $name) { print $name; } } $u = new User(); $u->theName('kerem');
尝试这个
function setName ($name = "happ") { ... }