PHP-将匿名函数分配给自己函数内部的变量并使用它

时间:2019-01-10 13:44:06

标签: php function php-7 php-7.0

所以我正在尝试做这样的事情:

function func() {

    $call = function() {
        ...
    };

    $call();

}

但是它抛出一个错误:

  

函数名称必须是字符串

我也尝试过这样调用函数:

$this->call();
call(); // and like this

而且效果不佳。

我为什么不能做我正在做的事情吗?

编辑

  

原始代码似乎有问题,而不是在我编写的示例中

这是我的真实代码:

$data = [...];
$menu_array = [];
$getChildren = function($id) {
          $children = [];
          foreach ($data as $node) {
              if ($id == $node["parent"]) {
                  array_push($children, $node);
              }
          } 
          return empty($children) ? null : $children;
        };

        $check = function($arr, $dat) {
            foreach ($dat as $node) {
                $children = $getChildren($node["id"]);
                if ($children == null) {
                    $arr[$node["display_name"]] = $node["model"];
                } else {
                    $arr[$node["display_name"]][] = $children;
                    $check($children);
                }
            }
        };
$check($menu_array, $data);

此行引发错误:

$children = $getChildren($node["id"]);

1 个答案:

答案 0 :(得分:2)

您想在这里做的就是递归! 问题在于,PHP不会自动将外部作用域的任何变量添加到函数作用域中。在您的代码$check($children);中,实际上没有定义变量$check

您可以通过告诉PHP应该从函数外部使用$getChildren$check变量来解决此问题:

$getChildren = function($id) use (&$getChildren) {
   ...

$check = function($arr, $dat) use (&$check, &$getChildren) {
  ...

改编自https://stackoverflow.com/a/2480242/2681964