ThinkPHP教程二、命名空间

在ThinkPHP框架中运用到了命名空间,首先我们要了解一下命名空间:

命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误。这种情况下只要避免命名重复就可以解决 。另外一种情况就是使用命名空间

一、使用namespace关键字创建命名空间

namespace beijing;
class Person{
    $name="tom";
}
namespace tianjin;
class Person{
    $name="jack";
}

注意以上代码如果没有namespace命名空间是会报错的

二、命名空间具体使用

namespace beijing;
class Person{
    $name="tom";
}
namespace tianjin;
class Person{
    $name="jack";
}
//默认调用最近命名空间的元素(单独文件情况)
$per=new Person;
echo $per->name; //jack

//显示调用beijing命名空间的元素
//(如果以下代码为:new beijing\Person 则会调用tianjin\beijing\Person,显然不对)
$per1 = new \beijing\Person;
echo $per1->name; //tom

三、命名空间-别名和导入
别名和导入可以看作是调用命名空间元素的一种快捷方式。PHP并不支持导入函数或常量 

namespace china\shenyang;
class TwoPerson{
    $name="二人转";
}
namespace china\beijing;
class Person{
   $name="烤鸭";
}
namespace china\tianjin;
class Person{
    $name="狗不理包子";
}
use china\beijing;
//$per1=new \china\beijing\Person;  //正确
//$per1=new china\beijing\Person;   //错误
$per1= new beijing\Person; //正确
echo $per1->name;   //烤鸭

use china\shenyang\TwoPerson;  //导入
$yu =new TwoPerson();
echo $yu->name;  //二人转

use china\beijing\Person as Pon;  //别名
$per2=new Pon;
echo $per2->name;  

四、命名空间—公共空间
有一个common_inc.php脚本文件,里面有一些好用的函数和类,在一个命名空间里引入这个脚本,脚本里的元素不会归属到这个命名空间。如果这个脚本里没有定义其它命名空间,它的元素就始终处于公共空间中,调用公共空间的方式是直接在元素名称前加 \ 斜线就可以了,否则PHP解析器会认为我想调用当前空间下的元素 
应用文件index.php

namespace shanghai;
include "./common.php";

//$p = new Order; //出现致命错误:找不到shanghai\Order类
$p = new \Order;  //正确
echo \HOST;         //正确
echo \getName(); //正确

公共文件common.php

class Order{}
function getName(){
  return "name";
}
const HOST="127.1.1.1";

反之,当前应用文件没有命名空间,被引入文件有命名空间,那么当前文件的空间就是公共空间。
在当前文件中使用公共空间的元素使用\斜杠

//应用文件
function getName(){
    return "hello";
}
class Person{
    $name="ppp";
}
const PWD="aaa";

include "./ini.php"; //具有命名空间的公共文件

//echo getName();
$s=new \Person; //调用公共空间元素
echo $s->name;  //test
echo \PWD;         //123

ini.php

namespace test;
class Person{
    $name="test";
}
const PWD="123";

五、命名空间需要注意

ThinkPHP教程二、命名空间

网友评论1

  1. 沙发
    蒂欧娜:

    我就是随便看看!

    2016-07-03 09:04 [回复]

发表评论

表情
还能输入210个字