代码之家  ›  专栏  ›  技术社区  ›  Fabiano Taioli

Closure::fromCallable for imported函数

  •  0
  • Fabiano Taioli  · 技术社区  · 8 年前

    我用的是 Functional-PHP library 但这个问题对于PHP来说是通用的(我使用的是7.2)。

    我试图从导入的函数中创建一个可调用的函数,但得到的结果是

    TypeError:未能从可调用函数创建闭包:未找到函数“pick”或函数名无效

    use function Functional\pick;
    
    class A
    {
        public function execute()
        {
            $pick1 = \Closure::fromCallable('pick');
        }
    }
    
    1 回复  |  直到 8 年前
        1
  •  3
  •   iainn    7 年前

    菲律宾比索 use 语句为文件的其余部分定义别名,但它们不会影响引用导入的函数或类的字符串。

    当你说

    use function Functional\pick;
    

    这意味着在那个文件中,你可以调用 Functional\pick 函数只是使用 pick(...) . 但是如果您使用一个字符串来引用它,那么PHP不知道如何扩展别名。

    fromCallable

    $pick1 = \Closure::fromCallable('Functional\pick');
    echo get_class($pick1);
    

    关闭

    或者,如果确实要使用别名,可以使用另一个匿名函数将调用包装得更深一层:

    use function Functional\pick;
    
    $pick1 = \Closure::fromCallable(function (...$args) { return pick(...$args); });
    

    但至少在我看来,这要复杂得多。

    编辑: this recent thread