8

编码:

public function couts_complets($chantier,$ponderation=100){

    function ponderation($n)
    {
        return($n*$ponderation/100); //this is line 86
    }

            ...

    }

我正在尝试做的事情:在函数 A 中声明函数 B,以便将其用作
array_map() 中的参数。

我的问题: 我收到一个错误:

未定义变量:考虑 [APP\Model\Application.php,第 86 行]

4

4 回答 4

12

尝试这个:

public function couts_complets($chantier,$ponderation=100){

    $ponderationfunc = function($n) use ($ponderation)
    {
        return($n*$ponderation/100);
    }

        ...
    $ponderationfunc(123);
}
于 2012-08-07T08:28:51.727 回答
2

从 php 5.3 开始,您可以使用匿名函数。您的代码将如下所示(未经测试的代码警告):

public function couts_complets($chantier,$ponderation=100) {
    array_map($chantier, function ($n) use ($ponderation) {
        return($n*$ponderation/100); //this is line 86
    }
}
于 2012-08-07T08:28:26.600 回答
2

在您当前的代码中,$ponderation不在函数范围内,因此出现“未定义”错误。

要将变量传递给“内部”函数,请使用该use语句。

function ponderation($n) use($ponderation) {
于 2012-08-07T08:28:40.513 回答
1

使用回调函数:

为了在 PHP 中使用函数作为参数,将函数的名称作为字符串传递就足够了:

array_map('my_function_name', $my_array);

如果函数实际上是类中的静态方法,则可以将其作为参数传递,如下所示:

array_map(array('my_class_name', 'my_method_name'), $my_array);

如果函数实际上是类中的非静态方法,则可以将其作为参数传递:

array_map(array($my_object, 'my_method_name'), $my_array);

声明回调函数:

如果你在全球范围内宣布,世界上的一切都是好的和清晰的——对每个人来说。

如果你在另一个函数中声明它,它将是全局的,但在父函数第一次运行之前它不会被定义,Cannot redefine function my_callback_function如果你再次运行父函数,它将触发错误。

如果将其声明为 lambda 函数/匿名函数,则需要指定允许查看/使用哪些上层范围变量。

调用回调:

function my_api_function($callback_function) {
    // PHP 5.4:
    $callback_function($parameter1, $parameter2);

    // PHP < 5.3:
    if(is_string($callback_function)) {
        $callback_function($parameter1, $parameter2);
    }
    if(is_array($callback_function)) {
        call_user_func_array($callback_function, array($parameter1, $parameter2));
    }
}
于 2012-08-07T08:32:34.793 回答