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。但这是错误消息的原因。

解决方案是下面的答案......谢谢大家:)

4

2 回答 2

9

当你使用类型提示时(只有array interfaces 和classes 可以类型提示/直到 php 5.6/。/since 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

于 2013-04-22T18:04:51.167 回答
-1

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

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

whereMyCallable是类名或关键字Array

于 2013-04-22T18:03:52.457 回答