use MyNamespace;
class NonPersistentStorage implements StorageInterface
两者都在 MyNamespace 中。然而,PHP 会查找 MyNamespace\NonPersistentStorage 和 StorageInterface(而不是 MyNamespace\StorageInterface)。我错过了什么吗?
最佳答案
PHP 命名空间的工作方式与其他语言略有不同。当你导入一个命名空间时,你并没有真正将类带入作用域,你只是给命名空间取别名。仅导入一级命名空间绝对没有任何作用。即使你导入了一些东西,你仍然需要引用它最底层的命名空间。
例如,如果你有这个:
foo.php:
namespace Bar\Baz\Biz;
class Foo
{}
以下是您如何使用它:
blah.php:
use Bar\Baz\Biz;
$var=new Biz\Foo();
看看我如何仍然需要使用 Biz 来引用它,即使我已经导入了它?
但是,您可以使用别名来解决这个问题:
blah.php:
use Bar\Baz\Biz\Foo as Foo;
$var=new Foo();
如您所见,我不再需要对其进行限定。
然而不幸的是,PHP 中没有“全部导入”;如果您想执行上述操作,则必须为要导入的每个类添加别名。
关于PHP 命名空间和实现关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1261666/