带有可调用提示的PHP函数参数...可以为NULL吗?

时间:2013-04-22 17:55:47

标签: php default-value type-hinting

我想有一个接受参数A的PHP函数,我已经给出了类型提示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 个答案:

答案 0 :(得分:8)

使用类型提示时(仅array interface,并且class es可以是类型提示),您可以将参数的默认值设置为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

答案 1 :(得分:-1)

您只能输入提示对象和数组。如果函数声明如下,则Typehinted变量可以为null:

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

其中MyCallable是类名或关键字Array