use MyNamespace;
class NonPersistentStorage implements StorageInterface两者都在MyNamespace中。然而PHP寻找MyNamespace\NonPersistentStorage和StorageInterface (而不是MyNamespace\StorageInterface)。我是不是遗漏了什么?
发布于 2009-08-11 17:09:11
实际上,"use“声明完全没有任何作用。当名称空间位于名称空间层次结构的较深位置(例如,使用Foo\Bar\Baz)或要为其指定别名(例如,使用Foo作为Bar)时,应导入(使用)名称空间。我认为您希望声明该文件本身属于MyNamespace:
namespace MyNamespace;
class NonPersistentStorage implements StorageInterface { /* ... */ }或者,您可能还希望使用与命名空间相同的语法导入单独的函数和类。
发布于 2009-08-11 17:14:19
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中没有"import all“;如果您想要执行上述操作,则必须为每个要导入的类指定别名。
发布于 2009-08-11 17:02:10
尝试使用:
use MyNamespace;
class NonPersistentStorage implements MyNamespace\StorageInterfacehttps://stackoverflow.com/questions/1261666
复制相似问题