如何将从另一个命名空间导入的普通函数传递为可调用?

时间:2017-07-13 10:32:35

标签: php namespaces php-7

假设我有这个导入声明:

use function A\B\C\fun;

然后我可以像这样使用fun

$result = fun($something);

现在我想将fun传递给期望callable的另一个函数/方法,例如:

$other_array = array_map('fun', $some_array);
$other_array = array_map('A\B\C\fun', $some_array);

这些都不会奏效。 PHP声称fun无法识别,即使直接通过其中任何一种语法变体调用fun也可以。{/ p>

2 个答案:

答案 0 :(得分:3)

我猜你依靠自动加载器来include定义函数的实际文件......遗憾的是,当尝试使用未定义的类或接口时,自动加载器才开始运转,不是函数。您必须先手动include相关文件。

答案 1 :(得分:1)

This似乎有效:

<?php

namespace A\B\C {
    function doubler($i) {
        return $i *= 2;
    }

}

namespace D {

    $doubled = array_map('A\B\C\doubler', [1,2,3]);    

    echo json_encode($doubled);

}

输出: [2,4,6]

但这听起来像你试过的?不确定有什么区别。如果您包含错误,则可能有帮助