在php中的函数中声明一个函数

时间:2012-08-07 08:25:16

标签: php

代码:

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 个答案:

答案 0 :(得分:10)

试试这个:

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

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

        ...
    $ponderationfunc(123);
}

答案 1 :(得分: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
    }
}

答案 2 :(得分:2)

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

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

function ponderation($n) use($ponderation) {

答案 3 :(得分: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));
    }
}