一.什么是TP5
ThinkPHP V5.0是一个为API开发而设计的高性能框架——是一个颠覆和重构版本,采用全新的架构思想,引入了很多的PHP新特性,优化了核心,减少了依赖,实现了真正的惰性加载,支持composer,并针对API开发做了大量的优化。 ThinkPHP5是一个全新的里程碑版本,包括路由、日志、异常、模型、数据库、模板引擎和验证等模块都已经重构,不适合原有3.2项目的升级,请慎重考虑商业项目升级,但绝对是新项目的首选(无论是WEB还是API开发),而且最好是忘记3.2版本的思维习惯,重新理解TP5。
二.命名空间
什么是命名空间?从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。
例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件 foo.txt
可以同时在目录/home/greg
和/home/other
中存在,但在同一个目录中不能存在两个foo.txt
文件。另外,在目录 /home/greg
外访问 foo.txt
文件时,我们必须将目录名以及目录分隔符放在文件名之前得到 /home/greg/foo.txt
。这个原理应用到程序设计领域就是命名空间的概念。
(命名空间相当于计算机中的文件夹)
上面描述来自:php手册:命名空间概述
三.PHP定义一个命名空间
1.在PHP中,命名空间主要的作用就是方便管理类!就如下面的例子一样:当没有命名空间的时候,如果我们用下面的定义:
<?php
class Demo {
public function one ()
{
echo '1';
}
}
class Demo {
public function two ()
{
echo '2';
}
}
?>
运行结果:
会直接报错的,因为类名相同导致冲突了。但是如果引入命名空间的话,就可以很方便的解决此冲突问题:
<?php
namespace one;
class Demo {
public function one ()
{
echo '1';
}
}
namespace two;
class Demo {
public function two ()
{
echo '2';
}
}
$demo1 = new \one\Demo();
$demo2 = new \two\Demo();
$demo1->one();
$demo2->two();
?>
运行结果:
可见命名空间完美的解决了类名冲突的问题。
2.命名空间对define定义的常量不管用,对const定义的常量管用。
- define定义的常量
<?php
namespace one;
define('MN', 'cxy');
namespace two;
define('MN', 'cxy0');
?>
运行结果:
- const定义的常量
<?php
namespace one;
const MN = 'cxy'; //在类外边定义
namespace two;
class mn
{
const MN = 'cxy0'; //在类里边定义
}
echo(\one\MN);
echo(\two\mn::MN);
?>
运行结果: