PHP命名空间 namespace 及导入 use 的用法

命名空间一个最明确的目的就是解决重名问题,PHP中不容许两个函数或者类出现相同的名字,不然会产生一个致命的错误。这种状况下只要避免命名重复就能够解决,最多见的一种作法是约定一个前缀。javascript

在PHP中,出现同名函数或是同名类是不被容许的。为防止编程人员在项目中定义的类名或函数名出现重复冲突,在PHP5.3中引入了命名空间这一律念。php

1.命名空间,即将代码划分红不一样空间,不一样空间的类名相互独立,互不冲突。一个php文件中能够存在多个命名空间,第一个命名空间前不能有任何代码。内容空间声明后的代码便属于这个命名空间,例如:java

<?php echo 111; //因为namespace前有代码而报错 namespace Teacher; class Person{ function __construct(){ echo 'Please study!'; } }

2.调用不一样空间内类或方法需写明命名空间。例如:编程

<?php namespace Teacher; class Person{ function __construct(){ echo 'Please study!<br/>'; } } function Person(){ return 'You must stay here!'; }; namespace Student; class Person{ function __construct(){ echo 'I want to play!<br/>'; } } new Person(); //本空间(Student空间) new \Teacher\Person(); //Teacher空间 new \Student\Person(); //Student空间 echo \Teacher\Person(); //Teacher空间下Person函数 //输出: I want to play! Please study! I want to play! You must stay here

3.在命名空间内引入其余文件不会属于本命名空间,而属于公共空间或是文件中自己定义的命名空间。例:函数

首先定义一个1.php和2.php文件:ui

<?php //1.php class Person{ function __construct(){ echo 'I am one!<br/>'; } }
<?php namespace Newer; require_once './1.php'; new Person(); //报错,找不到Person; new \Person(); //输出 I am tow!;
<?php     //2.php namespace Two class Person{ function __construct(){ echo 'I am tow!<br/>'; } }
<?php namespace New; require_once './2.php'; new Person(); //报错,(当前空间)找不到Person; new \Person(); //报错,(公共空间)找不到Person; new \Two\Person(); //输出 I am tow!;

4.下面咱们来看use的使用方法:(use之后引用可简写)spa

namespace School\Parents; class Man{ function __construct(){ echo 'Listen to teachers!<br/>'; } } namespace School\Teacher; class Person{ function __construct(){ echo 'Please study!<br/>'; } } namespace School\Student; class Person{ function __construct(){ echo 'I want to play!<br/>'; } } new Person(); //输出I want to play! new \School\Teacher\Person(); //输出Please study! new Teacher\Person(); //报错 ---------- use School\Teacher; new Teacher\Person(); //输出Please study! ---------- use School\Teacher as Tc; new Tc\Person(); //输出Please study! ---------- use \School\Teacher\Person; new Person(); //报错 ---------- use \School\Parent\Man; new Man(); //报错
相关文章
相关标签/搜索