码迷,mamicode.com
首页 > Web开发 > 详细

ThinkPHP 关于namespace的事儿

时间:2016-05-09 00:05:22      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

  如题,php通常是不允许函数重名的,例如a.php中有一个getName(),b.php中有一个getName(),在require_once a.php和b.php后就会报getName重复定义的错误。改错误可以通过rename函数名来解决,或者通过namespace来解决。看下面的代码:

 

 1 <?php
 2 
 3 function getName(){
 4   echo ‘getName 111‘;  
 5 }
 6 
 7 function getName(){
 8   echo ‘getName 222‘;  
 9 }
11 
12 ?>

这个代码是会报错函数重复定义错误的。可以通过下面的方式修改

 

 1 namespace t1;
 2   function getName(){
 3     echo ‘getName 111‘;  
 4   }
 5   
 6 namespace t2;
 7   function getName(){
 8     echo ‘getName 222‘;  
 9   }
10 
11 echo getName();
12 echo t1\getName();
13 echo \t1\getName();

 

通过命名空间 t1和t2来隔离getName函数,在下面的echo getName()会执行t2的getName函数,因为这种输出会查找最近的namespace的对于函数。

echo t1\getName()会报错,因为程序会查找最近的namespace,也就是真正执行的是 echo \t2\t1\getName()这个,在t2下没有t1\getName所以报错。

echo \t1\getName()执行t1的getName方法。

 上面还可以通过use namespace的方式来解决

将echo t1\getName()修改为 

use t1;

echo getName()也能解决问题。

 

在来看下面一段代码

 

 1 namespace t1;
 2 class Person{
 3   function getName(){
 4     return "t1.person.name";
 5   }    
 6 }
 7 
 8 namespace t2;
 9 class Person{
10   function getName(){
11     return "t2.person.name";
12   }
13 } 
14 
15 use t1\Person;
16 Person::getName();

 在最后Person::getName()时会发生错误,提示Person已经定义不能重复定义。原因是use t1\Person;把t1的Person类引入到了当前最近的namespace t2中,但是t2中已经存在Person类了,因此发生冲突,产生错误。解决办法如下

use t1\Person as Per;

Per::getName();

该代码使用as关键字,将引入的t1名称空间下的Person类重名命成了Per因此避免了和t2下的Person发生冲突。

 

ThinkPHP 关于namespace的事儿

标签:

原文地址:http://www.cnblogs.com/SR71BlackBird/p/5472185.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!