php命名空间是在5.3版本后加入的,命名空间反过来就是空间命名,在这里的空间命名就像window下的文件夹命名,命名空间用关键字namespace来定义。在这里用文件夹举三个例子,比如相对于test文件夹下面的home.txt文件,他相对于文件夹的路径是 test/home.txt,当前文件下他的文件名是 home.txt,他的绝对路径是/test/home.txt.
命名空间也是用三种方式来表示:
完全限定符 esthome,像文件夹中的绝对路径;
限定名称 testhome,像相对文件的目录路径;
非限定名称 home,像前面的直接使用文件名。
一直以来不太理解官方的意思,今天自己做了测试,表达一下自己的理解:
我认为命名空间就好像地球,定义命名空间就像是对国家的定义,使用命名空间就像是出国,第三个比喻可能不是很恰当,上个例子:
下面是当前访问程序代码:
结果:
总结:定义命名空间就好像告诉我们现在在哪里,上面三个文件各自定义不同的命名空间,就好像三个不同的国家,他们中的物品不可能被另一个国家的人使用,前提是必须被带到另一个国家,这里就用到了使用命名空间,官方表示 类、函数、常量都受命名空间的影响,但是我这里却没有作用,只对类有影响(下面代码
<?php /** * 当前文件名 word.php */ namespace japan; use usaMy; require_once("china.php"); require_once("usa.php"); // echo IP,'<br/>'; // echo MyFunction(),'<br/>'; echo My::who(),'<br/>';
上面代码的结果是: usaMy::who
如果定义命名空间为china:
<?php /** * 当前文件名 word.php */ namespace china; use usaMy; require_once("china.php"); require_once("usa.php"); echo IP,'<br/>'; echo MyFunction(),'<br/>'; echo My::who(),'<br/>';
结果为:
192.168.0.17 chinaMyFunction usaMy::who
根据以上总结,命名空间的定义就是国家的定义,在程序中就像一个大的代码库,如果想使用另一个代码库的类,就需要使用命名空间;
命名空间要求:
命名空间前面不要出现任何字符(包括空白)
第一次了解命名空间,如果上面有些定义说的不好,请留下您的意见,我对命名空间还有很多的疑问,比如:怎么使用命名空间影响常量和函数,如果你知道,或者你在哪里看到过好的解释,请给我留言