我想有一个接受参数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,而不是传入可调用对象。但这是错误信息的原因。
解决方案在下面回答...谢谢你们:)
答案 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
。