PHP命名空间_PHP_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > PHP > PHP命名空间

PHP命名空间

 2018/3/27 8:47:10  青春..荒唐  程序员俱乐部  我要评论(0)
  • 摘要:【前言】本文总结下PHP命名空间相关知识点【主体】多个人开发项目,函数名很容易重复。用了类之后,类之间的方法名被类分开,重名也没关系。但是当项目更大时,类名也有可能重复。此时就要用到命名空间,来避免重名。注意:①命名空间语句必须顶行,且之前不可以有任何输出案例:<?phpnamespacename;//命名空间---相当于创建了一个文件夹include'two.php';classTest1{publicfunction__construct(){echo"666";}}newTest1
  • 标签:PHP PHP命名空间

【前言】

? ? 本文总结下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别名,避免冲突;⑥自动加载函数的参数,包含“空间路径\类名”

?

?

?

?

?

?

?

.

发表评论
用户名: 匿名