0

图中标识部分,如果命名空间 ABC被导入为C是什么意思?
是指 use A\B\C as C吗?
还有 use A\B\C 这种是否等同于 use A\B\C as C?

2个回答

2

已采纳

你这里说的

是指 use ABC as C吗?
是对的,

然后

还有 use ABC 这种是否等同于 use ABC as C?

是等效的;

我来说一下为什么会用use ABC as C这种情况,可能才有意义;

举个例子:

namespace Hello{
    class Test {
        public function test() {
            echo 'Hello\Test';
        }
    }
}
namespace World{
    class Test {
        public function test() {
            echo 'World\Test';
        }
    }
}

这里是两个命名空间,假设在要同时引入这两个命名空间;

use Hello\test;
use World\test;

在调用的时候

(new Test())->test();

我其实是不知道到底是调用的那个命名空间的,会引发歧义,所以我也就需要用到别名引入了:

use Hello\Test as TestA;
use Hello\Test as TestB;

然后

(new TestA())->test();
(new TestB())->test();

就很清晰明了了。
然后,为什么说等同呢,实际上就是

(new Hello\Test())->test();
(new World\Test())->test();

这也就是文中提到的转换的意思,也就是会转换成如上代码。

1
回复 小小的PHP能干啥

理解了就给我点个采纳吧,哈哈哈

kumfo · 9月13日

1
回复 小小的PHP能干啥

没错,在同一个文件里写示例没什么太多意义,主要是分成几个文件来做命名空间引入才有意义,在同一个文件里不需要使用use来做一次引用的其实。
当然我也给一个写在同一个文件的例子:

<?php
namespace Hello {
    class Test {
        public function test() {
            echo 'Hello/Test';
        }
    }
}
namespace World {
    class Test {
        public function test() {
            echo 'World/Test';
        }
    }
}

namespace Test {
    use Hello\Test as TestA;
    use World\Test as TestB;
    (new TestA())->test();
    (new TestB())->test();
}

kumfo · 9月13日

展开评论
1

正常情况下我们需要使用命名空间AB下的C类,就需要使用如下语句

use A\B\C as C

这是最完整的写法。如果没有同名的C类,那么as C可以省略,因此通常我们直接写成

use A\B\C

如此而已。

撰写答案

相似问题