【问题标题】:What is the "use function" expression?什么是“使用功能”表达?
【发布时间】:2026-01-30 02:40:01
【问题描述】:

我看到了这个 sn-p 我不明白为什么要使用 use function array_map 表达式?

<?php

namespace Project\MyProject;

use function array_map;

class MyProjectClass 
{
    protected $arr = [];
    public function __construct(array $arr)
    {
        $this->arr = array_map('trim', $arr);
    }
}

【问题讨论】:

  • 它导入了一个函数。
  • 在这种情况下是多余的。全局函数将被隐式查找。导入函数是一个不可衡量的性能问题。类名后面的括号() 是语法错误,顺便说一句。
  • @simon 没有导入功能也能正常工作
  • 没关系;只是一个边注。 // 另见how to call global functions classes from namespace PHP → 它解释了语法/行为。 Use function 主要适用于不同命名空间的别名。对于全局标识符,它可以说只是一种样式选择,一些 IDE 甚至会自动注入它。 - 你对语法/语义有疑问吗?还是关于原理? (这将意味着固执己见的答案。)

标签: php


【解决方案1】:

how to call global functions classes from namespace PHP中所述:

use function array_map;

将全局函数别名到本地命名空间中。

  • 这通常是不需要的。
  • 无论如何,PHP 都会在全局范围内查找函数。
  • 只有在当前命名空间中重新声明一个全局函数才有意义。
    • 这种情况比较少见。
    • 但如果你有(这被称为“猴子补丁”),那么你也不想用use function 破坏它。

引入use function的真正原因是:

  • 对于实际的别名/重命名函数:

    • use function App\Helpers\my_mappymcmapface as array_map;
    • use function \trim as chomp;
  • 还因为 PHP 编码人员之前一直在他们的代码库中乱扔\trim\strpos

    • 那是那些毫无根据的微观性能优化之一。

所以是的,对于这种情况,这是毫无意义的装饰。

【讨论】: