2014-06-24 208 views
3

这可能是一个很奇怪的问题,但我需要确定它是否真的存在与否。 我已经得到了具有以下任务PHP开发人员位置招聘任务:PHP:奇怪的函数调用函数()()

做一个功能总和两个数字一个b但它必须被称为总和(a)(b)

我从来没有见过类似的东西,找不到类似上述功能的任何东西。招聘人员表示,这不是一个错字;我很困惑。

+1

不确定PHP,但是在JavaScript中很容易。它只是意味着'sum'函数带有一个参数,并返回一个函数,它本身就具有参数。 PHP可以像JavaScript那样返回函数吗? – David

+2

正确答案是:“PHP不是Javascript”。 –

回答

10

此作业希望您了解partial application。基本上,你的sum函数应该返回接受一个参数,需要从周围封闭的另外一个功能:

// Javascript 
function sum(a) { return function(b) { return a + b } } 
sum(3)(4) // 7 

可以用PHP做几乎一样:

function sum($a) { 
    return function($b) use($a) { 
     return $a + $b; 
    }; 
} 

但因为PHP没有按“T允许在连续两个电话,你需要一个临时变量:

$add3 = sum(3); 
print $add3(4); // 7 

sum(3)(4); 

是不可能的在PHP(5.5)和解析错误。

我很确定你的面试官实际上是指JavaScript,而不是PHP(注意在作业中缺少$)。