提问人:Sina Ghoshuni 提问时间:8/8/2021 最后编辑:yiviSina Ghoshuni 更新时间:8/16/2021 访问量:604
为什么在 PHP 中使用 “use” 关键字来导入核心标识符?
Why use the "use" keyword in PHP to import core identifiers?
问:
有时在某些库中,例如 ,我看到了导入核心标识符(例如函数、类或常量)的关键字,但我根本无法理解为什么要导入它们。thephpleague/csv
use
请参阅以下示例:
use Generator;
use SplFileObject;
use function filter_var;
use function get_class;
use function mb_strlen;
use function rawurlencode;
use function sprintf;
use function str_replace;
use function str_split;
use function strcspn;
use function strlen;
use const FILTER_FLAG_STRIP_HIGH;
use const FILTER_FLAG_STRIP_LOW;
use const FILTER_SANITIZE_STRING;
或者从这里开始更多。
这个文件中导入的这些类、函数和常量属于 PHP 核心,所以我们实际上不需要导入它们。
为什么这个库和其他库会导入这些?
答:
3赞
deceze
8/8/2021
#1
当您处于 中时,每个裸名称都引用该命名空间中的一个名称。即:namespace
namespace Foo;
echo bar();
bar
这里的真正意思是.Foo\bar
如果此命名空间中不存在全局名称,则有回退到全局名称的规则。如果您不想依赖这些规则,或者如果您确实在命名空间中定义了这些名称,并且您不想不断显式地编写这些名称,那么您可以显式地使用这些全局名称,以使其明确引用而不是引用。\bar()
use
bar
\bar
Foo\bar
大多数时候,PHP内置名称可能不是必需的,但也许项目作者只是将其确定为规则,以避免由于命名空间解析歧义而导致的错误。
7赞
yivi
8/10/2021
#2
这样做的目的是执行(微)性能优化,如此处所述。(存档链接,以防万一)。
这个想法是,通过使用避免全局名称查找和跳过回退规则,可以获得一些性能。
请注意,对于任何现实生活中的工作负载,这些收益都是可以忽略不计且无关紧要的,并且它们大多因操作码缓存而变得无关紧要。然而,性能提升是存在的,尽管它可能很小。
你可以阅读一些关于这个的冗长而有趣的讨论:
评论