Sin*_*uni 7 php oop namespaces
有时在一些库中,比如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;
Run Code Online (Sandbox Code Playgroud)
或者更多来自这里。
该文件中导入的这些类、函数和常量属于 PHP 核心,因此我们实际上不需要导入它们。
为什么这个库和其他库导入这些?
当您位于 中时namespace,每个裸名称都引用该名称空间内的名称。IE:
namespace Foo;
echo bar();
Run Code Online (Sandbox Code Playgroud)
bar这里的真正意思是Foo\bar。
如果此名称空间中不存在该名称,则有回退到全局名称的规则。如果您不想依赖这些规则,或者如果您确实在名称空间中定义了这些名称,并且您不想不断地\bar()显式编写,那么您可以显式地显示use这些全局名称以使其明确bar指的是\bar和不是Foo\bar。
大多数情况下,PHP 内置名称可能没有必要,但项目作者可能只是将其作为规则来建立,以避免由于名称空间解析不明确而导致错误。