PHP中的 use function是什么意思

use function array_map; 看见github上有人这么写,这是什么意思,直接使用不可以吗

阅读 3.7k
2 个回答

1、主要作用是为了引用命名空间
2、主要目的是为了防干扰。

<?php

namespace App {
    // 当前在 App 命令空间下定义了一个 array_map 方法,
    function array_map(string $func, array $array)
    {
        var_dump(__FUNCTION__ ,$func,implode(',',$array));
    }
    // 现在我们使用 array_map 就会默认使用当前命名空间下的
    array_map('自定义的', [1]);
    // 在 App 命名空间内,如果想要使用系统的 array_map ,有两种办法
    // A.使用 \ 表示使用根命名空间下的方法
    \array_map(function($i){
        echo $i.PHP_EOL;
    },[123]);
    // B.使用 use function array_map ,但是光这样是不行的,
    // 还需要给他一个别名,因为在当前命名空间下已经有一个名字
    // 叫 array_map 的方法了,直接 use 会导致命名空间冲突
    use function \array_map as o_array_map;
    o_array_map(function($i){
        echo $i.PHP_EOL;
    },[123]);

}
// 以下同理
namespace Run {
    // 先引入了自带的 array_map 
    use function \array_map;
    // 调用正常,
    array_map(function ($i) {
        echo $i . PHP_EOL;
    }, [1, 2, 3]);
    // 这里又引入了上面 \App\array_map ,同样,因为上面的引入已经占用了,
    // 所以这里必须给一个别名,避免冲突
    use function \App\array_map as AppArrayMap;
    AppArrayMap('自定义的', [4, 5, 6]);
    // 或者使用完整命名空间,这里 App 前面为啥要加 \ 号呢,你可以理解为
    // 在文件系统中,相对路径和绝对路径的关系,如果前面没有 \ 就会变成 \Run\App\array_map 了。
    \App\array_map('自定义的2',[4,5,6]);
}

// 即,谁先 use 进来,就表示了当前命名空间下,先用谁的,
// 后面要用就必须要限定他的完整命名空间,或者给他一个别名
// 当然,如果当前命名空间下不存在这个方法,默认会去调用系统的
// 如果系统也没有这个方法,就会抛出方法不存在的错误
// 
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题