第一天:命名空间

一.什么是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';
  }
}
?>

运行结果:


image.png

会直接报错的,因为类名相同导致冲突了。但是如果引入命名空间的话,就可以很方便的解决此冲突问题:

<?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();
?>

运行结果:


image.png

可见命名空间完美的解决了类名冲突的问题。
2.命名空间对define定义的常量不管用,对const定义的常量管用。

  • define定义的常量
<?php
namespace one;
    define('MN', 'cxy');

namespace two;
    define('MN', 'cxy0');
?>

运行结果:


image.png
  • const定义的常量
<?php
namespace one;
    const MN = 'cxy'; //在类外边定义

namespace two;
    class mn
    {
        const MN = 'cxy0'; //在类里边定义
    }
echo(\one\MN);
echo(\two\mn::MN);
?>

运行结果:


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容