我知道之前可能已经提出过这个问题,但是我不太了解匿名函数(闭包)的整个概念,以及它们如何适用于我的情况。注意:我知道拥有所有这些简单的功能是非常愚蠢的,但是我的任务要求说我应该拥有所有这些功能:/。
我有几个功能。在下面的函数中,参数$action1
和$action2
将被函数替换:
function dothis($num1, $num2, $action1, $action2)
{
$result = $num1 + $num2;
if ($result > 52){
//do $action1 which is a function
} else {
//do $action2 which is another function
}
return $result;
}
函数dothis
将在另一个名为add
的函数中调用。这是add
函数:
function add($action1,$action2)
{
$answer = dothis(42, 34, $action1, $action2);
echo $answer;
}
$action1
函数中的 $action2
和add
与$action1
函数中的$action2
和dothis
基本相同。他们现在需要有不同的名字,即使它们是相同的东西吗?
现在,add
函数将在main
函数中调用,其中参数$action1
和$action2
将被它们对应的实际函数替换:
function main()
{
add($fun1,$fun2);
echo 'Arithmetic complete';
}
这是$fun1
和$fun2
的代码:
$fun1 = function () {
echo 'Wow! The answer is greater than 52.';
};
$fun2 = function () {
echo 'Oh no! The answer is less than 52.';
};
我该怎么做,我需要改变什么?我非常感谢任何帮助。提前谢谢!
答案 0 :(得分:3)
你可以通过在()
之后调用一个函数(必要时在括号内加参数)。
function dothis($num1,$num2,$action1,$action2){
$result = $num1 + $num2;
if ($result > 52){
$action1();
}
else{
$action2();
}
return $result;
}
要使用此语法处理匿名函数,您必须关闭eAccelerator。见Anonymous functions does not work: Function name must be a string
如果您不能使用匿名函数,则需要使用命名函数。
function fun1 () {
echo 'Wow! The answer is greater than 52.';
}
$fun1 = 'fun1';
function fun2() {
echo 'Oh no! The answer is less than 52.';
}
$fun2 = 'fun2';
答案 1 :(得分:2)
我想这是一个相当糟糕的方法。您可以使用call_user_func()
之类的函数,但不能使用anonymous functions。为什么不提出一个定义两个函数的类或(如果代码相当短)但是直接在if / else语句中?
类方法的一些虚拟示例代码:
class doSomething {
function dothis($num1, $num2) {
$result = $num1 + $num2;
if ($result > 52) {
$this->action1($num1, $num2);
} else {
$this->action2($num1, $num2);
}
return $result;
}
function action1($numbers) {
// do sth. here
}
function action2($num1, $num2) {
// do sth. else here
}
}
// afterwards
$pointer = new doSomething();
$pointer->dothis(21,34); // action1
$pointer->dothis(1,1); // action2