资讯专栏INFORMATION COLUMN

php - namespace篇

jimhs / 3448人阅读

摘要:中命名空间可以解决两类问题用户编写的代码与内部的类函数常量或第三方类函数常量之间的名字冲突。在没定义命名空间的情况下,所有的常量类函数等都在全局空间下。注意访问任意全局类函数或变量,都可以使用完全限定名称,例如或者。

之前没有系统学习过PHP语言,直接上手TP框架了,所以认为namespaceuseTP框架的一部分,最近学习语言模块的时候遇到了这个问题,所以汇总了一下。

PHP中命名空间可以解决两类问题:

用户编写的代码与PHP内部的类、函数、常量或第三方类、函数、常量之间的名字冲突。

为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名,提高代码的可读性。

在没定义命名空间的情况下,所有的常量、类、函数等都在全局空间下。

命名空间

通过关键字namespace声明。可以在同一个文件中定义不同的命名空间代码,全局的非命名空间代码与命名空间中的代码通过大括号的形式可以组合在一起


子命名空间
与目录和文件的关系很像,PHP命名空间也允许指定层次的命名空间的名称

命名空间的引入

通过关键字use引入,通过as定义别名

引入命名空间三种情况:
非限定名称,或不包含前缀的类名称。在命名空间为a下,使用$a = new foo();代表引用的是afoo。在命名空间为全局的情况下,使用该方法则引用的是foo
限定名称,或包含前缀的名称。在命名空间为a下,使用$a = new bfoo();代码引入的是afoo。在命名为全局的情况下,使用该方法引入的是bfoo
完全限定名称,或包含了全局前缀操作符的名称。在命名空间为a下,$a = new cfoo();这种情况下,总是引入为cfoor文件

上述三种方式其实就是文件路径中绝对路径和相对路径。

注意:访问任意全局类、函数或变量,都可以使用完全限定名称,例如strlen()或者Exception

namespace__NAMESPACE__魔术常量

namespace用于定义命名空间,__NAMESPACE__是包含当前命名空间的字符串,在全局的情况下,它是一个空字符串""

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29028.html

相关文章

  • thinkphp源码分析(三)—自动加载(Loader的分析)

    摘要:源码分析自动加载系统会调用方法注册自动加载,在这一步完成后,所有符合规范的类库包括依赖加载的第三方类库都将自动加载。是通过加载对应的文件进行注册加载的。 源码分析 自动加载 系统会调用 Loader::register()方法注册自动加载,在这一步完成后,所有符合规范的类库(包括Composer依赖加载的第三方类库)都将自动加载。 系统的自动加载由下面主要部分组成: 1. 注册系统的自...

    Pandaaa 评论0 收藏0
  • Zephir入门 —— 语法

    摘要:变量对象属性数组静态变量不支持全局变量,也不允许访问用户域的全局变量,但是可以访问的超级全局变量变量类型支持动态和静态类型。虽然失去了动态型变量的灵活性,但是在编译时静态变量能进行更多的优化。 概述 Zephir的语法跟PHP很相似,所以这里不会把官网的文档照搬过来翻译一遍,而是会把一些Zephir相较于PHP比较特别的语法挑出来讲一下。如果想要要完整学习Zephir的语法,没有比官...

    shiina 评论0 收藏0
  • lumen5.5学习路由和中间件(四)

    摘要:想要做到这一点,你需要定义中间件为。如果你希望在及方法被调用时使用一致的中间件实例,只需在容器中使用容器的方法注册中间件以上就是路由和中间件的学习,最后那那其实理解得有点虚,有错记得指出修正,谢谢 前几篇了解完从请求到响应的流程后,仔细学习下路由和中间件的玩法 ----------------------------------分割线--------------------------...

    1fe1se 评论0 收藏0
  • Laravel Policy 使用

    摘要:提供更简单的方式来处理用户授权动作。类似用户认证,有种主要方式来实现用户授权和策略,我这里主要讲解下策略的使用。文档上面有详细的说明,我这里只根据自己使用过程做一个简单的笔记。 Laravel 提供更简单的方式来处理用户授权动作。类似用户认证,有 2 种主要方式来实现用户授权:gates 和策略,我这里主要讲解下策略的使用。 文档 上面有详细的说明,我这里只根据自己使用过程做一个简单的...

    曹金海 评论0 收藏0
  • Laravel与Repository Pattern(仓库模式)——概念

    摘要:确实,要独立一个操作层出来,确实会增加大量代码,非常繁琐。如果你是小项目,未必需要使用这一模式。但如果是年以上的复杂大型项目,这种模式的好处就比较明显了。如果你是纯新手,建议你暂时不要往下看,先把用得比较熟练后再回来学习。 为什么要学习Repository Pattern(仓库模式) Repository 模式主要思想是建立一个数据操作代理层,把controller里的数据操作剥离出来...

    tomener 评论0 收藏0

发表评论

0条评论

jimhs

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<