详细分析PHP 命名空间(namespace)

2020-06-30 19:00:05丽君

关键字 namespace 可用来显式访问当前命名空间或子命名空间中的元素。它等价于类中的 self 操作符。

namespace操作符,命名空间中的代码

<?php
namespace MyProject;

use blahblah as mine; // see "Using namespaces: importing/aliasing"

blahmine(); // calls function blahblahmine()
namespaceblahmine(); // calls function MyProjectblahmine()

namespacefunc(); // calls function MyProjectfunc()
namespacesubfunc(); // calls function MyProjectsubfunc()
namespacecname::method(); // calls static method "method" of class MyProjectcname
$a = new namespacesubcname(); // instantiates object of class MyProjectsubcname
$b = namespaceCONSTANT; // assigns value of constant MyProjectCONSTANT to $b
?>

namespace操作符, 全局代码

<?php

namespacefunc(); // calls function func()
namespacesubfunc(); // calls function subfunc()
namespacecname::method(); // calls static method "method" of class cname
$a = new namespacesubcname(); // instantiates object of class subcname
$b = namespaceCONSTANT; // assigns value of constant CONSTANT to $b
?>

使用命名空间:别名/导入

PHP 命名空间支持 有两种使用别名或导入方式:为类名称使用别名,或为命名空间名称使用别名。

在PHP中,别名是通过操作符 use 来实现的. 下面是一个使用所有可能的三种导入方式的例子:

1、使用use操作符导入/使用别名

<?php
namespace foo;
use MyFullClassname as Another;

// 下面的例子与 use MyFullNSname as NSname 相同
use MyFullNSname;

// 导入一个全局类
use ArrayObject;

$obj = new namespaceAnother; // 实例化 fooAnother 对象
$obj = new Another; // 实例化 MyFullClassname 对象
NSnamesubnsfunc(); // 调用函数 MyFullNSnamesubnsfunc
$a = new ArrayObject(array(1)); // 实例化 ArrayObject 对象
// 如果不使用 "use ArrayObject" ,则实例化一个 fooArrayObject 对象
?>

2、 一行中包含多个use语句

<?php
use MyFullClassname as Another, MyFullNSname;

$obj = new Another; // 实例化 MyFullClassname 对象
NSnamesubnsfunc(); // 调用函数 MyFullNSnamesubnsfunc
?>

导入操作是在编译执行的,但动态的类名称、函数名称或常量名称则不是。

3、导入和动态名称

<?php
use MyFullClassname as Another, MyFullNSname;

$obj = new Another; // 实例化一个 MyFullClassname 对象
$a = 'Another';
$obj = new $a;   // 实际化一个 Another 对象
?>

另外,导入操作只影响非限定名称和限定名称。完全限定名称由于是确定的,故不受导入的影响。

4、导入和完全限定名称

<?php
use MyFullClassname as Another, MyFullNSname;

$obj = new Another; // 实例化 MyFullClassname 类
$obj = new Another; // 实例化 Another 类
$obj = new Anotherthing; // 实例化 MyFullClassnamething 类
$obj = new Anotherthing; // 实例化 Anotherthing 类
?>								 
			 
相关文章 大家在看