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

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

  • 用户编写的代码与PHP内部的类、函数、常量或第三方类、函数、常量之间的名字冲突。
  • 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名,提高代码的可读性。

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

命名空间

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


<?php
# 命名空间TestA
namespace TestA{
class TestA{}
function test(){}
} # 命名空间TestB
namespace TestB{
class TestB{}
function test(){}
} # 全局的非命名空间
namespace{
class TestC{}
function test(){}
}

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


<?php
namespace a\b\Test; ?>

命名空间的引入

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

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

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

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


<?php
namespace foo; use \A\B\TestA; #导入命名空间
use \A\B\TestB as TB; #导入命名空间,并别名为TB ?>

namespace__NAMESPACE__魔术常量

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

原文地址:https://segmentfault.com/a/1190000015602185

php - namespace篇的更多相关文章

  1. hbase shell-namespace(命名空间指令)

    hbase shell命名空间namespace篇: 1. alter_namespace (一般用于添加删除一个属性,很少使用) hbase(main)::> help 'alter_name ...

  2. TGL站长关于常见问题的回复

    问题地址: http://www.thegrouplet.com/thread-112923-1-1.html 问题: 网站配有太多的模板是否影响网站加载速度 月光答复: wp不需要删除其他的模板,不 ...

  3. struts2学习:配置篇之namespace

    把namespace单独拉出来讲一方面是因为它实际上不是一个element,而只是一个attribute,前面已经说了,它是package的一个attribute:另外一方面是因为这个属性是我接触St ...

  4. Neutron路由篇:L3 agent+Namespace

    Neutron 的路由服务是由 l3 agent 提供的. 除此之外,l3 agent 通过 iptables 提供 firewall 和 floating ip 服务.     l3 agent 需 ...

  5. k8s核心资源之namespace与pod污点容忍度生命周期进阶篇(四)

    目录 1.命名空间namespace 1.1 什么是命名空间? 1.2 namespace应用场景 1.3 namespacs常用指令 1.4 namespace资源限额 2.标签 2.1 什么是标签 ...

  6. C#多线程之线程池篇3

    在上一篇C#多线程之线程池篇2中,我们主要学习了线程池和并行度以及如何实现取消选项的相关知识.在这一篇中,我们主要学习如何使用等待句柄和超时.使用计时器和使用BackgroundWorker组件的相关 ...

  7. C#多线程之线程池篇2

    在上一篇C#多线程之线程池篇1中,我们主要学习了如何在线程池中调用委托以及如何在线程池中执行异步操作,在这篇中,我们将学习线程池和并行度.实现取消选项的相关知识. 三.线程池和并行度 在这一小节中,我 ...

  8. C#多线程之线程池篇1

    在C#多线程之线程池篇中,我们将学习多线程访问共享资源的一些通用的技术,我们将学习到以下知识点: 在线程池中调用委托 在线程池中执行异步操作 线程池和并行度 实现取消选项 使用等待句柄和超时 使用计时 ...

  9. C#多线程之线程同步篇3

    在上一篇C#多线程之线程同步篇2中,我们主要学习了AutoResetEvent构造.ManualResetEventSlim构造和CountdownEvent构造,在这一篇中,我们将学习Barrier ...

随机推荐

  1. SELinux的启动和关闭

    1.SELinux简介 SELinux是Security Enhanced Linux的缩写,字面上的意思就是安全强化的Linux,它是由美国国家安全局 (NSA) 开发的,整合到Linux核心的一个 ...

  2. 【转】Spring,Spring MVC及Spring Boot区别

    对于一个Java开发者来说,Spring可谓如雷贯耳,无论是Spring框架,还是Spring引领的IOC,AOP风格,都对后续Java开发产生的深远的影响,同时,Spring社区总能及时响应开发者的 ...

  3. Luogu P1160队列安排【链表/老文搬家】By cellur925

    原文发表于2018-04-15 08:15:09,我的luogu博客qwq. 看到题以后,要求维护一个可在任意位置修改添加删除元素的序列,那么显然我们可以用到链表. 然而本蒟蒻不久前刚刚学会链表.链表 ...

  4. bzoj 2257[Jsoi2009]瓶子和燃料 数论/裴蜀定理

    题目 Description jyy就一直想着尽快回地球,可惜他飞船的燃料不够了. 有一天他又去向火星人要燃料,这次火星人答应了,要jyy用飞船上的瓶子来换.jyy 的飞船上共有 N个瓶子(1< ...

  5. SpringBoot使用MongoDB

    一.什么是MongoDB MongoDB是一个基于分布式文件存储的数据库,由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的 ...

  6. 学会用LATEX写论文

    记录下,方便找寻 https://www.bilibili.com/video/av18365099/

  7. Miller&&Pollard HDOJ 4344 Mark the Rope

    题目传送门 题意:一个长为n(n<2^63)的管子,在管子上做标记,每隔L个长度单位做一个标记,从管子头端开始,保证最后一次标记恰好在管子的尾端.让你找出有多少个这样的L(L<n),且他们 ...

  8. 173 Binary Search Tree Iterator 二叉搜索树迭代器

    实现一个二叉搜索树迭代器.你将使用二叉搜索树的根节点初始化迭代器.调用 next() 将返回二叉搜索树中的下一个最小的数.注意: next() 和hasNext() 操作的时间复杂度是O(1),并使用 ...

  9. 206 Reverse Linked List 反转链表

    反转一个单链表.进阶:链表可以迭代或递归地反转.你能否两个都实现一遍?详见:https://leetcode.com/problems/reverse-linked-list/description/ ...

  10. ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第五天(非原创)

    文章大纲 一.课程介绍二.前台系统(门户系统)搭建介绍三.前台系统(门户系统)搭建实战四.js请求跨域解决五.项目源码与资料下载六.参考文章   一.课程介绍 一共14天课程(1)第一天:电商行业的背 ...