【问题标题】:PHP function parameter with callable hint... can it be NULL?带有可调用提示的 PHP 函数参数...可以为 NULL 吗?
【发布时间】:2013-04-15 17:42:27
【问题描述】:

我想要一个接受参数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);   
        ...
    }
}

在上面的代码 sn-p 中,我不需要用任何数据回调,所以我没有传入可调用对象,而是传入 NULL。但这是错误消息的原因。

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

【问题讨论】:

  • 你能把代码贴出来吗?
  • 是的,到目前为止你做了什么?什么会调用此错误消息?
  • 你用的Witch PHP版本?

标签: php default-value type-hinting


【解决方案1】:

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

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

其中MyCallable 是类名或关键字Array

【讨论】:

  • 我认为这已经过时了 - 你可以使用 callable 作为提示,从 5.4 开始。
【解决方案2】:

当您使用类型提示时(仅arrayinterfaces 和classes 可以进行类型提示/直到 php 5.6/。/从 7.0 开始也可以输入标量类型/),您可以将参数的默认值设置为空。如果你愿意,让参数是可选的。

$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

【讨论】:

  • 哦对了,我忘了callable是5.4引入的,所以我的评论无效(传递字符串时不起作用)
  • @Kovge & dev-null-dweller...谢谢大家。认为这回答了我的问题。有什么方法可以做到这一点而不必给它一个默认值?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多