搜索
查看: 2406|回复: 0

PHP命名空间和自动加载类

[复制链接]

4856

主题

4856

帖子

4861

积分

新手上路

Rank: 1

积分
4861
发表于 2018-2-11 12:13:52 | 显示全部楼层 |阅读模式

            PHP的命名空间(namespace)是php5.3之后才有的。这个概念在C#中已经很早就有了,php中的namespace其实和c#的概念是一样的。
为什么php中要使用namespace?
假设如果不使用namespace,那么每个类在一个项目中的名字就必须是固定的。因为php在new的时候不管是调用autoload还是调用已加载过的类,都存在一个类名对应的文件。所以在没有namespace的时候,我们会想各种命名规则来区分不同的类,比如project1_school1_class1_Student或者project2_school_class_Student。
引入namespace之后就可以将这个有效规避了,一个namespace就相当于对应一个文件路径,查找这个类的时候,就会去对应的文件路径查找类定义文件了。
背景
最近有个朋友问我 PHP 命名空间是咋样的,但是由于长期不做开发,笔者实际上也已经忘得差不多了,所以也回答不出来。只是记得和 Java 挺像的。事后重新查了一下 PHP 的官方文档,并且和 Java 做对比,Java 的命名空间实际上来自于 JVM 本身的机制,JVM 是基于 class 字节码文件加载类,由于类很容易出现重名的情况,换言之 class 字节码文件也会出现重名情况,所以就需要使用目录来管理不同的字节码文件,而为了保证加载正常,所以就需要命名空间这种机制。当然,也可以说是由于命名空间的存在才有了目录管理的方式。但是 PHP 和 Java 不一样,PHP 是一种动态脚本语言,它的代码分散在所有脚本中,当需要的时候才会使用 include 函数加载对应的文件,所以 PHP 的命名空间,实际上是基于 PHP 的自动加载类,自动加载类实现了才能保证 PHP 命名空间存在的意义。
命名空间概述
命名空间据笔者所知应该最早源于 C++ 语言,在 C++98 标准以后,为了保证各种命名不重合所推出的一种解决方案。现在的面向对象语言基本都有这种机制,当然除了命名空间以外,还有很多种方式,比如模块化,不过实际上这些机制都是用来解决封装问题的,所以笔者个人认为并无好坏之分。先把 PHP 官方文档代码拉出来溜溜
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

长春门户网站

长春门户网是网民了解长春的网络窗口,同是提供长春地区百姓生活分类供求信息的门户网站,同时提供长春网站建设、长春网站设计,我们将逐步的完善网站分类信息资源;

长春门户网二维码

联系我们

  • 工作时间:早上8:00 - 晚上5:30
  • 投稿联系:13624467185(微信同号)
  • 反馈邮箱:5053050@QQ.com
  • 公司地址:吉林省长春市亚泰大街与自由大路交汇五环国际大厦1408室

QQ|小黑屋|手机版|Archiver|cc! ( 吉ICP备2021009740号-8 )

Powered by Discuz! X3.4 © 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表