你不能typehint字符串,你只能typehint对象和数组,所以这是不正确的:
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 foo(array $foo = null) {
if ($foo === null) {
$foo = array(1, 2, 3);
}
编辑:从PHP 5.4,你也可以typehint callable:
function foo(callable $callback) {
call_user_func($callback);
}