如何在没有命名空间的情况下组织外部模块
命名空间的问题
命名空间似乎很适合组织外部模块中的类型,但它们引入一些限制:
-
命名空间污染:每个模块都会创建自己的命名空间,使得跨模块查找和重用类型变得困难。
-
名称冲突:如果两个模块定义具有相同名称的类型,则命名空间不能防止冲突,编译器会报告错误。
-
过度嵌套:在模块中使用命名空间会导致具有多层嵌套的杂乱结构。
糖果杯类比
想象一下为每种类型的糖果使用单独的杯子(例如,Twix、PeanutButterCup)。这种方法效率低下,因为你最终会得到多个杯子,并且不清楚糖果之间的关系。
相反,最好根据文件系统位置来组织糖果,类似于模块中的组织方式一个项目。
组织的关键原则模块
-
导出尽可能接近顶层:
- 对单个类或函数使用导出默认值,使它们直接消费者可以访问。
- 对于多个导出,请使用顶级
-
谨慎使用模块/命名空间:
- 仅对大型或复杂模块使用导出命名空间/模块很多的导出。
危险信号
- 仅包含导出模块 Foo { ... }
- 带有单个非默认导出类或导出函数
- 具有相同导出模块 Foo { ... } 的多个文件(它们不会结合)
以上是如何在没有命名空间的情况下组织外部模块:超越糖果杯类比?的详细内容。更多信息请关注PHP中文网其他相关文章!