【前言】
? ? 本文总结下PHP命名空间相关知识点
?
【主体】
多个人开发项目,函数名很容易重复。用了类之后,类之间的方法名被类分开,重名也没关系。
但是当项目更大时,类名也有可能重复。此时就要用到命名空间,来避免重名。
注意:①命名空间语句必须顶行,且之前不可以有任何输出
案例:
class="php" name="code"><?php namespace name;//命名空间---相当于创建了一个文件夹 include 'two.php'; class Test1{ public function __construct(){ echo "666"; } } new Test1(); ?>
two.php:
<?php namespace name1; class Test1{ public function __construct(){ echo "333"; } } ?>
最终会输出666,也就是调用了one.php里的函数。
如果去掉命名空间语句,再次测试会发现报错提示:Fatal error: Cannot redeclare class Test1。无法重新声明Test1
这里如果想调用two.php里的同名函数怎么办呢?
①原理类似于Linux下的文件查询操作cd\...\...;②之前说过,命名空间相当于创建了一个文件夹,现在我们要通过cd来查看内部文件;③定向调用
//two.php里命名空间为name1,所以相当于在name1文件夹下查看文件 new \name1\Test();
所以,上例可以改为
<?php namespace name;//命名空间---相当于创建了一个文件夹 include 'mySql.class.php'; class Test{ public function __construct(){ echo "666"; } } new \name1\Test();//这时便会输出333 ?>
有了命名空间可以明确指出运用的类
上例继续修改
one.php:
use \name1\Test1; new Test1();
two.php:
<?php namespace name1; class Test1{//改名为Test1 public function __construct(){ echo "333"; } } ?>
但是这种写法需要修改文件,有时没有相应权限。所以这里我们可以用别名as
use \name1\Test as newName; new newName();//直接new()别名
这样便可以访问
注意:命名空间可以创建多层,调用时按照cd原理逐层读取即可。例如
one.php:
use \name1\one\two\three\Test as newName; new newName();
two.php:
<?php namespace name1\one\two\three; ?>
注意:
①命名空间声明位置必须位于首行;②声明后,其后的函数、类都将被封锁在命名空间里;
③引入其他页面后,自身空间不受干扰;④如果想明确使用某空间下的类,可以从根目录下逐层寻找读取,原理类似Linux的cd;
⑤若频繁使用某个空间下的类,可以先用use声明,然后as别名,避免冲突;⑥自动加载函数的参数,包含“空间路径\类名”
?
?
?
?
?
?
?
.