有时在一些图书馆,比如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;
或更多来自here.
该文件中导入的这些类、函数和常量属于 PHP 核心,因此我们实际上不需要导入它们。
为什么这个库和其他库导入这些?
这样做的目的是执行(微观)性能优化,如上所述here. (存档链接, 万一)。
这个想法是通过避免全局名称查找和跳过后备规则,可以获得一些性能。
请注意,对于任何现实生活中的工作负载,这些收益都是可以忽略不计且无关紧要的,并且它们大多与操作码缓存无关。尽管如此,性能提升(尽管可能很小)仍然存在。
您可以阅读一些关于此的冗长且有趣的讨论:
- Reddit 讨论上面链接的文章
- Symfony 项目决定不应用此优化
- 自动执行此优化的脚本的自述文件
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)