详细解读php的命名空间(二)(2)

<?php namespace Col; /*define默认设置的是全局的常量*/ define('CON','globals'); /*特别声明设立的是当前命名空间下的常量*/ define(__NAMESPACE__.'\CON','col'); /*特别声明设立的是Index命名空间下的常量*/ define('Index\CON','index'); /*全局操作符后直接跟常量名,所以获取到的是全局的常量CON*/ var_dump(\CON); //globals /*没有任何限定,所以获取的是当前命名空间的常量CON*/ var_dump(CON); //col /*全局限定,读取其对应的Col命名空间的常量CON*/ var_dump(\Col\CON); //col /*全局限定,读取其对应的Index命名空间的常量CON*/ var_dump(\Index\CON); //index ?>

3:看到上面的实例,推及到函数及类(接口)就不一样了,在命名空间里设置的函数及类(接口)都是属于该命名空间的内容,不管是不是一个文件多个命名空间大括号里设置的。

函数和类的实例:可以看出在命名空间内的函数和类是属于命名空间的

index.php

<?php function foo(){ return 'global'; } class fool{ static function ceshi(){ return 'global'; } } ?>

col.php

<?php namespace Col; require './index.php'; //如果不引入index.php文件,那么下面的\foo()和\foo::ceshi()都会报fatal error function foo(){ return 1; } class fool{ static function ceshi(){ return 2; } } var_dump(\foo()); //global var_dump(foo()); //打印1 var_dump(\Col\foo()); //打印1 var_dump(\fool::ceshi()); //global var_dump(fool::ceshi()); //打印2 var_dump(\Col\fool::ceshi()); //打印2 ?>

4:设置命名空间的时候,要注意不要使用php的关键字,例如function、class、abstract之类的,否则会报出parse error。

5:同一个命名空间,不同文件间的使用无须带上命名空间,直接使用函数、常量、类及接口就可以了。

6:一个命名空间的类、常量、接口、函数单独引入另一个命名空间,其中函数、常量、类、接口如果发生了冲突,如果没有用限定词则优先使用单独引入类、常量、接口、函数。

实例:

indext.php

<?php namespace Lic; define(__NAMESPACE__.'\CON',1); function func(){ echo 1; } class foo{ static function ceshi(){ return 1; } }

只引入命名空间

<?php namespace Col; require './indext.php'; use \Lic; define(__NAMESPACE__.'\CON',2); //设定命名空间的常量必须写明命名空间,否则是全局的常量 function func(){ echo 2; } class foo{ static function ceshi(){ return 2; } } var_dump(CON); //打印2 var_dump(namespace\CON); //打印2 func(); //打印2 namespace\func(); //打印2 var_dump(foo::ceshi()); //打印2 var_dump(namespace\foo::ceshi()); //打印2

如果单独引入类、接口、函数、常量的情况,名称冲突且没有用限定的话优先使用引入的:

<?php namespace Col; require './indext.php'; use \Lic\foo; use function \Lic\func; use const \Lic\CON; define(__NAMESPACE__.'\CON',2); //设定命名空间的常量必须写明命名空间,否则是全局的常量 function func(){ echo 2; } class foo{ static function ceshi(){ return 2; } } var_dump(CON); //打印1 var_dump(namespace\CON); //打印2 func(); //打印1 namespace\func(); //打印2 var_dump(foo::ceshi()); //打印1 var_dump(namespace\foo::ceshi()); //打印2

暂时就补充到这里,以后还有后续的再添加。。。

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5dbfe94a51458985615b610b319c4cd6.html