当前位置:K88软件开发文章中心编程语言PHPPHP01 → 文章内容

PHP 命名空间(namespace)

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-11 12:38:34

__,"\n";}const constname = "global";$a = 'classname';$obj = new $a; // prints classname:





:





__construct$b = 'funcname';$b(); // prints funcnameecho constant('constname'), "\n"; // prints global?>必须使用完全限定名称(包括命名空间前缀的类名称)。注意因为在动态的类名称、函数名称或常量名称中,限定名称和完全限定名称没有区别,因此其前导的反斜杠是不必要的。动态访问命名空间的元素<?phpnamespace namespacename;class classname{ function __construct() { echo __METHOD__,"\n"; }}function funcname(){ echo __FUNCTION__,"\n";}const constname = "namespaced";include 'example1.php';$a = 'classname';$obj = new $a; // 输出 classname:





:





__construct$b = 'funcname';$b(); // 输出函数名echo constant('constname'), "\n"; // 输出 global/* 如果使用双引号,使用方法为 "\\namespacename\\classname"*/$a = '\namespacename\classname';$obj = new $a; // 输出 namespacename\classname:





:





__construct$a = 'namespacename\classname';$obj = new $a; // 输出 namespacename\classname:





:





__construct$b = 'namespacename\funcname';$b(); // 输出 namespacename\funcname$b = '\namespacename\funcname';$b(); // 输出 namespacename\funcnameecho constant('\namespacename\constname'), "\n"; // 输出 namespacedecho constant('namespacename\constname'), "\n"; // 输出 namespaced?>namespace关键字和__NAMESPACE__常量PHP支持两种抽象的访问当前命名空间内部元素的方法,__NAMESPACE__ 魔术常量和namespace关键字。常量__NAMESPACE__的值是包含当前命名空间名称的字符串。在全局的,不包括在任何命名空间中的代码,它包含一个空的字符串。 __NAMESPACE__ 示例, 在命名空间中的代码<?phpnamespace MyProject;echo '"', __NAMESPACE__, '"'; // 输出 "MyProject"?> __NAMESPACE__ 示例,全局代码<?phpecho '"', __NAMESPACE__, '"'; // 输出 ""?>常量 __NAMESPACE__ 在动态创建名称时很有用,例如:使用__NAMESPACE__动态创建名称<?phpnamespace MyProject;function get($classname){ $a = __NAMESPACE__ . '\\' . $classname; return new $a;}?>关键字 namespace 可用来显式访问当前命名空间或子命名空间中的元素。它等价于类中的 self 操作符。namespace操作符,命名空间中的代码<?phpnamespace MyProject;use blah\blah as mine; // see "Using namespaces:





importing/aliasing"blah\mine(); // calls function blah\blah\mine()namespace\blah\mine(); // calls function MyProject\blah\mine()namespace\func(); // calls function MyProject\func()namespace\sub\func(); // calls function MyProject\sub\func()namespace\cname:





:





method(); // calls static method "method" of class MyProject\cname$a = new namespace\sub\cname(); // instantiates object of class MyProject\sub\cname$b = namespace\CONSTANT; // assigns value of constant MyProject\CONSTANT to $b?>namespace操作符, 全局代码<?phpnamespace\func(); // calls function func()namespace\sub\func(); // calls function sub\func()namespace\cname:





:





method(); // calls static method "method" of class cname$a = new namespace\sub\cname(); // instantiates object of class sub\cname$b = namespace\CONSTANT; // assigns value of constant CONSTANT to $b?>使用命名空间:别名/导入 PHP 命名空间支持 有两种使用别名或导入方式:为类名称使用别名,或为命名空间名称使用别名。在PHP中,别名是通过操作符 use 来实现的. 下面是一个使用所有可能的三种导入方式的例子:1、使用use操作符导入/使用别名<?phpnamespace foo;use My\Full\Classname as Another;// 下面的例子与 use My\Full\NSname as NSname 相同use My\Full\NSname;// 导入一个全局类use \ArrayObject;$obj = new namespace\Another; // 实例化 foo\Another 对象$obj = new Another; // 实例化 My\Full\Classname 对象NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func$a = new ArrayObject(array(1)); // 实例化 ArrayObject 对象// 如果不使用 "use \ArrayObject" ,则实例化一个 foo\ArrayObject 对象?>2、 一行中包含多个use语句<?phpuse My\Full\Classname as Another, My\Full\NSname;$obj = new Another; // 实例化 My\Full\Classname 对象NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func?>导入操作是在编译执行的,但动态的类名称、函数名称或常量名称则不是。3、导入和动态名称<?phpuse My\Full\Classname as Another, My\Full\NSname;$obj = new Another; // 实例化一个 My\Full\Classname 对象$a = 'Another';$obj = new $a; // 实际化一个 Another 对象?>另外,导入操作只影响非限定名称和限定名称。完全限定名称由于是确定的,故不受导入的影响。4、导入和完全限定名称<?phpuse My\Full\Classname as Another, My\Full\NSname;$obj = new Another; // 实例化 My\Full\Classname 类$obj = new \Another; // 实例化 Another 类$obj = new Another\thing; // 实例化 My\Full\Classname\thing 类$obj = new \Another\thing; // 实例化 Another\thing 类?>使用命名空间:后备全局函数/常量 在一个命名空间中,当 PHP 遇到一个非限定的类、函数或常量名称时,它使用不同的优先策略来解析该名称。类名称总是解析到当前命名空间中的名称。因此在访问系统内部或不包含在命名空间中的类名称时,必须使用完全限定名称,例如:1、在命名空间中访问全局类<?phpnamespace A\B\C;class Exception extends \Exception {}$a = new Exception('hi'); // $a 是类 A\B\C\Exception 的一个对象$b = new \Exception('hi'); // $b 是类 Exception 的一个对象$c = new ArrayObject; // 致命错误, 找不到 A\B\C\ArrayObject 类?>对于函数和常量来说,如果当前命名空间中不存在该函数或常量,PHP 会退而使用全局空间中的函数或常量。2、 命名空间中后备的全局函数/常量<?phpnam

上一页  [1] [2] [3]  下一页


PHP 命名空间(namespace)