UNPKG

manual-php

Version:
75 lines (59 loc) 1.49 kB
# 命名空间和动态语言特征 PHP 命名空间的实现受到其语言自身的动态特征的影响。因此,如果要将下面的代码 `example.php` 转换到命名空间中: ```php <?php class Bar { // } /** * Return the name of the current namespace. * * @param void * @return string */ function bar(): string { return __NAMESPACE__; } const BAR = __NAMESPACE__; ``` 必须使用完全限定名称(包括命名空间前缀的类名称)。注意因为在动态的类名称、函数名称或常量名称中,限定名称和完全限定名称没有区别,因此其前导的反斜杠是不必要的。 ```php <?php namespace Foo; class Bar { // } /** * Return the name of the current namespace. * * @param void * @return string */ function bar(): string { return __NAMESPACE__; } const BAR = __NAMESPACE__; require __DIR__ . '/example.php'; $bar = 'Bar'; var_dump(new $bar); // object(Bar)#1 (0) { } $bar = 'bar'; var_dump($bar()); // string(0) "" $bar = 'BAR'; var_dump(constant($bar)); // string(0) "" $bar = '\Foo\Bar'; var_dump(new $bar); // object(Foo\Bar)#1 (0) { } $bar = 'Foo\Bar'; var_dump(new $bar); // object(Foo\Bar)#1 (0) { } $bar = '\Foo\bar'; var_dump($bar()); // string(3) "Foo" $bar = 'Foo\bar'; var_dump($bar()); // string(3) "Foo" $bar = '\Foo\BAR'; var_dump(constant($bar)); // string(3) "Foo" $bar = 'Foo\BAR'; var_dump(constant($bar)); // string(3) "Foo" ```