PHP函数参数使用callable提示...是否可以为NULL?

3
我希望有一个PHP函数,它接受一个参数A,我已经给定了类型提示callable。问题是在某些情况下,我想能够传递NULL或类似的参数值,表示未提供回调。我会得到以下错误:
"Argument must be callable, NULL given".

请问有什么方法可以实现这个功能吗?

回答和问题如下...

PHP版本为5.4.14

代码如下...

class DB
{
    protected function ExecuteReal($sqlStr, array $replacements, callable $userFunc, $allowSensitiveKeyword)
    {
        ...
        if( $userFunc != NULL && is_callable($userFunc) )
            $returnResult = $call_user_func($userFunc, $currRow);
        ...
    }

    ...
    public function DoSomething(...)
    {
        $result = $this->ExecuteReal($queryStr, Array(), NULL, TRUE);   
        ...
    }
}

在上面的代码片段中,我不需要通过可调用对象回调任何数据,因此我只需传递NULL。但这是错误消息的原因。
解决方案如下...谢谢大家 :)

2
请问您能否发布代码? - Samuel Cook
是的,你目前做了什么?是什么触发了这个错误信息? - Gottlieb Notschnabel
你使用哪个版本的PHP? - Kovge
2个回答

9
当你使用类型提示(仅限于数组接口和类,直到PHP5.6版本为止。自7.0版本以来,也可以将标量类型作为类型提示),你可以将参数的默认值设置为null。如果你想,也可以让该参数变为可选项。
$something = 'is_numeric';
$nothing = null;

function myFunction(Callable $c = null){
      //do whatever

}

所有工作:

 myFunction();
 myFunction($nothing);
 myFunction($something);

在这里阅读更多信息:http://php.net/manual/en/language.oop5.typehinting.php

意思是:点击链接可以阅读更多关于PHP面向对象编程中类型提示的内容。

哦,是的,我忘了 callable 是在5.4中引入的,所以我的评论是无效的(当传递字符串时不起作用)。 - dev-null-dweller
@Kovge和dev-null-dweller...谢谢你们。我想这回答了我的问题。有没有不必给它一个默认值就能做到这一点的方法? - Jimbo

-1

你只能对对象和数组进行类型提示。如果函数像这样声明,那么类型提示的变量可以为 null:

function aFn($required, MyCallable $optional=null){ /*do stuff */}

其中 MyCallable 是一个类名或关键字 Array


3
我认为这已经过时了 - 你可以使用callable作为提示,因为自5.4以来就可以这样做。 - halfer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接