代码之家  ›  专栏  ›  技术社区  ›  koen

php名称空间和implements关键字

  •  1
  • koen  · 技术社区  · 16 年前
    use MyNamespace;
    
    class NonPersistentStorage implements StorageInterface
    

    两者都在MyNamespace中。然而,PHP寻找mynamespace\nonpersistentstorage和storageinterface(而不是mynamespace\storageinterface)。我错过什么了吗?

    3 回复  |  直到 16 年前
        1
  •  2
  •   Ignas R    16 年前

    实际上,这个“使用”声明完全没有作用。当名称空间在名称空间层次结构中较深时(例如,使用foo\bar\baz),或者希望为其提供别名时(例如,使用foo作为bar),应导入(使用)名称空间。我认为您想声明文件本身属于mynamespace:

    namespace MyNamespace;
    
    class NonPersistentStorage implements StorageInterface { /* ... */ }
    

    或者,您也可能希望使用与命名空间相同的语法导入单独的函数和类。

        2
  •  3
  •   ryeguy    16 年前

    PHP名称空间的工作方式与其他语言略有不同。当您导入一个名称空间时,实际上并没有将类引入到范围中,您只是给名称空间起了别名。只导入一个级别的名称空间完全不起作用。即使在导入某些内容时,仍然需要引用其最底层的命名空间。

    例如,如果您有:

    PHP:

    namespace Bar\Baz\Biz;
    
    class Foo
    {}
    

    以下是您如何使用它:

    PHL: PHP:

    use Bar\Baz\Biz;
    
    $var=new Biz\Foo();
    

    看到了吗,我仍然需要使用biz引用它,即使我导入了它?

    但是,您可以使用别名来绕过此问题: PHL: PHP:

    use Bar\Baz\Biz\Foo as Foo;
    
    $var=new Foo();
    

    正如你所看到的,我不再需要资格了。

    然而,不幸的是,在PHP中没有“全部导入”;如果您想执行上面所做的操作,则必须为要导入的每个类都创建别名。

        3
  •  0
  •   RaYell    16 年前

    尝试使用:

    use MyNamespace;
    
    class NonPersistentStorage implements MyNamespace\StorageInterface
    
    推荐文章