![](/img/trans.png)
[英]Calling each anonymous function from an array of functions using a for loop PHP
[英]PHP - Calling functions from an array?
这是我目前拥有的:
public function setUp() {
$tests = array(
'printHello' => array(),
'printWorld' => array(),
'printName' => array('Bob'),
);
}
public function printHello() {
echo "Hello, ";
}
public function printWorld() {
echo "World!";
}
public function printName($name=false) {
echo $name;
}
我想做的是遍历所有功能并连续运行它们。 这是我最终要做的,但是似乎应该有一种更有效的方法来做到这一点:
foreach($tests as $test=>$parameters) {
$num_params = count($parameters);
switch($num_params) {
case 0:
$this->$test();
break;
case 1:
$this->$test($parameters[0]);
break;
case 2:
$this->$test($parameters[0],$parameters[1]);
break;
case 3:
$this->$test($parameters[0],$parameters[1],$parameters[2]);
break;
default:
echo "Error! More than 3 parameters for function" . $test . "!";
exit;
}
}
我正在使用PHP 5.3。 有没有更有效的方式来循环调用函数?
编辑:我不能使用call_user_func_array
因为我从其父类中调用非静态方法。 还有另一种方法吗?
您正在寻找call_user_func_array()
:
foreach($tests as $test=>$parameters) {
call_user_func_array( array( $this, $test), $parameters);
}
将其加载到一个简单的测试类中:
class Test {
public function setUp() {
$tests = array(
'printHello' => array(),
'printWorld' => array(),
'printName' => array('Bob'),
);
foreach( $tests as $fn => $params)
call_user_func_array( array( $this, $fn), $params);
}
public function printHello() {
echo "Hello, ";
}
public function printWorld() {
echo "World!";
}
public function printName($name=false) {
echo $name;
}
}
我们可以看到,PHP> = 5.0.0的输出如下:
Hello, World!Bob
有一件事叫做
这应该可以帮助您防止已经切换参数计数。
剩下的就是一个简单的foreach循环
foreach ($tests as $method => $parameters)
{
$callback = array($this, $method);
call_user_func_array($callback, $parameters);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.