命名空间 - 介绍

  • 作者:KK

  • 发表日期:2018.8.5


它是个什么东西

平时我们实例化一个类的时候都是用new 类名()这样的语法,命名空间其实是给类名前面加了目录路径一样,比如new db\MySql()这样,就是实例化 db 目录下的 MySql 类,大概是这样的意思。并且这个目录可以多层嵌套:lib\db\MySqllib\runtime\Logger等四五六七层你自己想像,就像平时浏览目录文件一样表示路径。


这样有什么用

  1. 用于防止类名冲突,进行目录隔离。

  2. 代码架构更清晰,方便维护。

比如我以前接触过一个商城项目,有一个叫Shop的类表示卖家商店,后来由于某些需求要加入淘宝的提供的SDK(淘宝写好的一套PHP代码,有许多 class),可是include进来的时候产生了类名冲突,因为淘宝也定义了一个叫Shop的类表示他们的卖家!要么咱们的类名改掉,要么就加命名空间——最后的选择就是加命名空间。


直接把类名加下划线分词不就行了吗

这样的方法很土!而且国际化的做法都是用命名空间这样的手法来解决的,不信你试试,迟早吃苦果!

可是为什么有些大公司的SDK封装的类却没有命名空间呢?——因为他们考虑到要兼容旧版本PHP,怕有些项目还是老版本PHP,希望他们也能调用SDK,所以决定不用命名空间。