PHP 面向对象编程和设计模式 (5)_PHP教程
PHP高级程序设计 学习笔记 2014.06.12
命名空间概述
PHP 在 5.3.0 以后的版本开始支持命名空间。什么是命名空间?从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。在PHP中,命名空间用来解决在编写类库或应用程序时创建可重用的代码如类或函数时碰到的两类问题:
PHP 命名空间提供了一种将相关的类、函数和常量组合到一起的途径。下面是一个说明 PHP 命名空间语法的示例:
定义命名空间
虽然任意合法的PHP代码都可以包含在命名空间中,但只有三种类型的代码受命名空间的影响,它们是:类,函数和常量。命名空间通过关键字namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间。另外,与PHP其它的语言特征不同,同一个命名空间可以定义在多个文件中,即允许将同一个命名空间的内容分割存放在不同的文件中。当然你也可以在同一个文件中定义多个命名空间。
<span>namespace</span><span> MyProject; </span><span>class</span><span> MyClass { #code... }</span>
定义子命名空间:与目录和文件的关系很象,PHP 命名空间也允许指定层次化的命名空间的名称。因此,命名空间的名字可以使用分层次的方式定义:
<span>namespace</span><span> MyProject\helper\http; </span><span>class</span><span> MyClass { #code... }</span>
在同一个文件中定义多个命名空间:在同一个文件中声明多个命名空间有两种方式,不过在实际编程实践中,非常不提倡在同一个文件中定义多戈命名空间。这种方式的主要用于将多个 PHP 脚本合并在同一个文件中。下面列出第一种方法。
<span>namespace</span><span> MyProject\helper\http; </span><span>class</span><span> MyClass { #code... } </span><span>namespace</span><span> MyProject\helper\request; </span><span>class</span><span> MyClass { #code... }</span>
不过强烈不建议使用这种方法,可以参考下面的大括号定义法:
<span>namespace</span><span> MyProject\helper\http; { </span><span>class</span><span> MyClass { #code... } } </span><span>namespace</span><span> MyProject\helper\request; { </span><span>class</span><span> MyClass { #code... } }</span>
PHP 命名空间中的元素使用
在讨论如何使用命名空间之前,必须了解 PHP 是如何知道要使用哪一个命名空间中的元素的。类名可以通过三种方式引用:
使用命名空间:别名/导入
允许通过别名引用或导入外部的完全限定名称,是命名空间的一个重要特征。PHP 命名空间支持 有两种使用别名或导入方式:为类名称使用别名,或为命名空间名称使用别名。在PHP中,别名是通过操作符 use 来实现的。
注意PHP不支持导入函数或常量。
<span>namespace</span><span> foo; use My\Full\Classname </span><span>as</span><span> Another; </span><span>//</span><span> 下面的例子与 use My\Full\NSname as NSname 相同</span> <span>use My\Full\NSname; </span><span>//</span><span> 导入一个全局类</span> use \ArrayObject;
名称解析规则
在说明名称解析规则之前,我们先看一些重要的定义:
名称解析遵循下列规则:
Example 名称解析示例
<?<span>php namespace A; </span><span>use</span> B\D, C\E <span>as</span><span> F; </span><span>//</span><span> 函数调用</span> <span> foo(); </span><span>//</span><span> 首先尝试调用定义在命名空间"A"中的函数foo() // 再尝试调用全局函数 "foo"</span> <span> \foo(); </span><span>//</span><span> 调用全局空间函数 "foo" </span> <span> my\foo(); </span><span>//</span><span> 调用定义在命名空间"A\my"中函数 "foo" </span> <span> F(); </span><span>//</span><span> 首先尝试调用定义在命名空间"A"中的函数 "F" // 再尝试调用全局函数 "F" // 类引用</span> <span>new</span> B(); <span>//</span><span> 创建命名空间 "A" 中定义的类 "B" 的一个对象 // 如果未找到,则尝试自动装载类 "A\B"</span> <span>new</span> D(); <span>//</span><span> 使用导入规则,创建命名空间 "B" 中定义的类 "D" 的一个对象 // 如果未找到,则尝试自动装载类 "B\D"</span> <span>new</span> F(); <span>//</span><span> 使用导入规则,创建命名空间 "C" 中定义的类 "E" 的一个对象 // 如果未找到,则尝试自动装载类 "C\E"</span> <span>new</span> \B(); <span>//</span><span> 创建定义在全局空间中的类 "B" 的一个对象 // 如果未发现,则尝试自动装载类 "B"</span> <span>new</span> \D(); <span>//</span><span> 创建定义在全局空间中的类 "D" 的一个对象 // 如果未发现,则尝试自动装载类 "D"</span> <span>new</span> \F(); <span>//</span><span> 创建定义在全局空间中的类 "F" 的一个对象 // 如果未发现,则尝试自动装载类 "F" // 调用另一个命名空间中的静态方法或命名空间函数</span> <span> B\foo(); </span><span>//</span><span> 调用命名空间 "A\B" 中函数 "foo"</span> <span> B</span>::foo(); <span>//</span><span> 调用命名空间 "A" 中定义的类 "B" 的 "foo" 方法 // 如果未找到类 "A\B" ,则尝试自动装载类 "A\B"</span> <span> D</span>::foo(); <span>//</span><span> 使用导入规则,调用命名空间 "B" 中定义的类 "D" 的 "foo" 方法 // 如果类 "B\D" 未找到,则尝试自动装载类 "B\D"</span> <span> \B\foo(); </span><span>//</span><span> 调用命名空间 "B" 中的函数 "foo" </span> <span> \B</span>::foo(); <span>//</span><span> 调用全局空间中的类 "B" 的 "foo" 方法 // 如果类 "B" 未找到,则尝试自动装载类 "B" // 当前命名空间中的静态方法或函数</span> <span> A\B</span>::foo(); <span>//</span><span> 调用命名空间 "A\A" 中定义的类 "B" 的 "foo" 方法 // 如果类 "A\A\B" 未找到,则尝试自动装载类 "A\A\B"</span> <span> \A\B</span>::foo(); <span>//</span><span> 调用命名空间 "A\B" 中定义的类 "B" 的 "foo" 方法 // 如果类 "A\B" 未找到,则尝试自动装载类 "A\B"</span> ?>

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

如果您是一位经验丰富的 PHP 开发人员,您可能会感觉您已经在那里并且已经完成了。您已经开发了大量的应用程序,调试了数百万行代码,并调整了一堆脚本来实现操作

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

字符串是由字符组成的序列,包括字母、数字和符号。本教程将学习如何使用不同的方法在PHP中计算给定字符串中元音的数量。英语中的元音是a、e、i、o、u,它们可以是大写或小写。 什么是元音? 元音是代表特定语音的字母字符。英语中共有五个元音,包括大写和小写: a, e, i, o, u 示例 1 输入:字符串 = "Tutorialspoint" 输出:6 解释 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。总共有 6 个元

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

PHP的魔法方法有哪些?PHP的魔法方法包括:1.\_\_construct,用于初始化对象;2.\_\_destruct,用于清理资源;3.\_\_call,处理不存在的方法调用;4.\_\_get,实现动态属性访问;5.\_\_set,实现动态属性设置。这些方法在特定情况下自动调用,提升代码的灵活性和效率。
