命名空间的引入

1.为命名空间名称使用别名

即在命名空间中引入其他的命名空间,使用use操作符实现。

引入其他的命名空间后,使用只需在元素前面加上子命名空间的前缀即可,无需写上引入的全部空间名称

[php]  view plain  copy
  1. <?php  
  2. namespace app1\pro1\item1;   
  3. header("content-type:text/html;charset=utf-8");  
  4. function func(){  
  5.     echo "func1";  
  6. }  
  7. const x = "name1";  
  8. class Fruit{  
  9.     public $a = '苹果1';  
  10.     static $b = '菠萝1';  
  11. }  
  12.   
  13. namespace app2\pro2\item2\topic2;  
  14. function func(){  
  15.     echo "func2";  
  16. }  
  17. const x = "name2";  
  18. class Fruit{  
  19.     public $a = '苹果2';  
  20.     static $b = '菠萝2';  
  21. }  
  22.   
  23. use app1\pro1\item1; //引入命名空间  
  24. item1\func(); //func1  
  25. echo item1\x; //name1  
  26. echo item1\Fruit::$b//菠萝1  
  27. $fruit = new item1\Fruit;  
  28. echo $fruit->a; //苹果1  

在命名空间app2\pro2\item2\topic2引入了命名空间app1\pro1\item1,使用时在元素前加上子空间名称item1

2.为类名称使用别名

类在php中广泛使用,php提供专门针对引入命名空间中类的方式。

[php]  view plain  copy
  1. <?php  
  2. namespace app1\pro1\item1;   
  3. header("content-type:text/html;charset=utf-8");  
  4. function func(){  
  5.     echo "func1";  
  6. }  
  7. const x = "name1";  
  8. class Fruit{  
  9.     public $a = '苹果1';  
  10.     static $b = '菠萝1';  
  11. }  
  12.   
  13. namespace app2\pro2\item2\topic2;  
  14. function func(){  
  15.     echo "func2";  
  16. }  
  17. const x = "name2";  
  18.   
  19. use app1\pro1\item1\Fruit; //引入命名空间中的类  
  20. func(); //func2  
  21. echo x; //name2  
  22. //使用引入的命名空间的类元素  
  23. echo Fruit::$b//菠萝1  
  24. $fruit = new Fruit;  
  25. echo $fruit->a; //苹果1  
在命名空间app1\pro1\item1中定义了类Fruit, 在命名空间app2\pro2\item2\topic2中引入了上一个命名空间的类后, 可以直接调用类元素

3.公共命名空间中引入其他命名空间

php中未定义命名空间的元素所在的空间为公共命名空间,公共命名空间引入其他命名空间的方式为include(),括号内填写路径

未明确前缀的调用将在当前空间寻找该元素,找不到再在命名空间找,再找不到就会报错;

单个\前缀访问公共命名空间中的func()函数;

使用引入的命名空间的元素,使用完全限定名称

举例说明:

定义一个test1.php文件,内容如下:

[php]  view plain  copy
  1. <?php  
  2. namespace app1\pro1\item1;  
  3. header("content-type:text/html;charset=utf-8");  
  4. function func(){  
  5.     echo "func1";  
  6. }  
  7. const x = "name1";  
  8. class Fruit {  
  9.     public $a = "苹果1";  
  10.     static $b = "菠萝1";  
  11. }  

在同级目录下新建一个test.php文件,引入test1.php:

[php]  view plain  copy
  1. <?php  
  2. header("content-type:text/html;charset=utf-8");  
  3. function func(){  
  4.     echo "func";  
  5. }  
  6. const x = "name";  
  7. class Fruit{  
  8.     public $a = "苹果";  
  9.     static $b = "菠萝";  
  10. }  
  11. include("./test1.php");  
  12. func(); //func   
  13. \func(); //func   
  14. \app1\pro1\item1\func(); //func1  
  15.   
  16.   
  17. echo x; //name  
  18. echo \x; //name  
  19. echo \app1\pro1\item1\x; //name1  
  20.   
  21.   
  22. echo Fruit::$b//菠萝  
  23. $fruit = new Fruit;  
  24. echo $fruit->a; //苹果  
  25.   
  26.   
  27. echo \app1\pro1\item1\Fruit::$b//菠萝1  
  28. $fruit1 = new \app1\pro1\item1\Fruit;  
  29. echo $fruit1->a; //苹果1  
### 如何在 TypeScript 中引入命名空间 在 TypeScript 中,可以通过 `import` 关键字来引入其他文件中的命名空间。具体来说,有两种主要方式可以实现这一点。 #### 使用全局命名空间声明合并 当两个或多个模块定义了相同名称的命名空间时,这些定义会自动合并在一起。这种方式适用于在同一项目内不同文件之间共享相同的命名空间[^1]: 假设有一个名为 `shapes.ts` 的文件,其中定义了一个命名空间 `Shapes` 和一些几何形状类: ```typescript namespace Shapes { export class Circle { constructor(private radius: number) {} getArea(): number { return Math.PI * this.radius ** 2; } } export class Rectangle { constructor(private width: number, private height: number) {} getArea(): number { return this.width * this.height; } } } ``` 另一个文件 `main.ts` 可以通过简单的导入语句访问这个命名空间下的成员而无需显式的 import: ```typescript // main.ts let circle = new Shapes.Circle(5); console.log(`Circle area is ${circle.getArea()}`); ``` #### 导入外部模块中的命名空间 如果想要从一个独立的 .d.ts 文件或其他库中引入命名空间,则需要使用 ES6 风格的 `import` 语法: 考虑存在一个第三方库提供了一组工具函数封装在一个叫做 `Utils` 的命名空间里,并且该库已经安装到了项目的 node_modules 下面。那么可以在自己的代码里面这样写来加载并使用它们的功能: ```typescript /// <reference types="some-utils-library" /> import * as Utils from 'some-utils-library'; function processText(text: string): void { let processed = Utils.TextProcessing.trimAndLowercase(text); console.log(processed); } processText(' Hello World '); ``` 这里的关键在于确保目标库确实暴露出了相应的命名空间结构以便能够被正确解析和引用。对于大多数现代 JavaScript 库而言,默认情况下是以默认导出的形式发布的而不是传统的命名空间形式;因此,在实际开发过程中更常见的是直接处理esModule 而不是传统意义上的命名空间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值