广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP核心特性命名空间的示例分析
  • 277
分享到

PHP核心特性命名空间的示例分析

2023-06-15 06:06:28 277人浏览 八月长安
摘要

小编给大家分享一下PHP核心特性命名空间的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!提出php 在 5.3 后提出了命名空间用来解决组件之间的命名冲突问题,主要参考了文件系统的设计:同一个目录下不允许有相同的文

小编给大家分享一下PHP核心特性命名空间的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

提出

php 在 5.3 后提出了命名空间用来解决组件之间的命名冲突问题,主要参考了文件系统的设计:

  • 同一个目录下不允许有相同的文件名 - 同一个命名空间下不允许有相同的类;

  • 不同的目录可以有同名文件 - 不同的命名空间可以有相同的类;

定义

使用namespace关键字来定义一个命名空间。其中,顶层命名空间通常为厂商名,不同开发者的厂商命名空间是唯一的。命名空间不需要与文件目录一一对应,但是最好遵守PSR-4规范。

<?phpnamespace Symfony\Component\HttpFoundation;class Request {}命名空间必须在所有代码之前声明,唯一的例外就是 declare 关键字。<?phpdeclare(strict_types=1);namespace App;

命名空间内可包含任意 PHP 代码,但是仅对类 (包括抽象类和 Trait)、接口、函数和常量这四种类型生效。

<?phpnamespace MyProject;const CONNECT_OK = 1;class FOO {}interface Foo{}function foo() {}

使用

使用use关键字来引入命名空间

<?phpnamespace App;use Symfony\Component\HttpFoundation\Request;use Foo\Bar;class Test {    public function run()    {        $bar = new Bar();    }}

定义和使用推荐遵循PSR-2的规范

  • namespace之后必须存在一个空行;

  • 所有use声明必须位于namespace声明之后;

  • 每条use声明必须只有一个use关键字。

use语句块之后必须存在一个空行。

当use引入的类出现同名时,可使用as来定义别名

<?phpnamespace App;use Foo\Bar as BaseBar;class Bar extends BaseBar {}

限定符

除了使用use外,还可以直接使用\限定符来进行解析,规则很简单:如果含有\前缀则代表从全局命名空间开始解析,否则则代表从当前命名空间开始解析。

<?phpnamespace App;\Foo\Bar\foo();  // 解析成 \Foo\Bar\foo();Foo\Bar\foo();  // 解析成 App\Foo\Bar\foo();此规则也适用于函数、常量等$a = \strlen('hi'); // 调用全局函数 strlen$b = \INI_ALL; // 访问全局常量 INI_ALL$c = new \Exception('error'); // 实例化全局类 Exception

有两个需要特别注意的地方:

对于函数和常量而言,如果当前命名空间不存在,则会自动去全局命名空间去寻找,因此可省略\前缀。对于类而言,如果当前命名空间解析不到,不会去全局空间寻找,因此,不可省略\

$a = strlen('hi');$b = INI_ALL;$c = new Exception('error'); // 错误$c = new \Exception('error'); // 正确

当动态调用命名空间时,该命名空间始终会被当成是全局命名空间,因此可以省略前缀\

$class1 = 'Foo\Bar';$object1 = new $class1;  // 始终被解析成 \Foo\Bar

在内部访问命名空间

PHP 支持两种抽象的访问当前命名空间内部元素的方法,__NAMESPACE__魔术常量和namespace关键字。

__NAMESPACE__常量的值是包含当前命名空间名称的字符串,如果是在全局命名空间,则返回空字符串。

<?phpnamespace MyProject;function get($classname){    $a = __NAMESPACE__ . '\\' . $classname;    return new $a;}

关键字namespace可用来显式访问当前命名空间或子命名空间中的元素。它等价于类中的self操作符

namespace App;use blah\blah as mine;blah\mine(); // App\blah\mine()namespace\blah\mine(); // App\blah\mine()namespace\func(); // App\func()namespace\sub\func(); // App\sub\func()namespace\cname::method(); // App\cname::method()$a = new namespace\sub\cname(); // App\sub\cname$b = namespace\CONSTANT; // App\CONSTANT

转义\符号

此外,推荐对所有的\进行转义,避免出现不可预期的后果

$class = "dangerous\name"; // \n 被解析成换行符$obj = new $class;$class = 'dangerous\name'; // 正确,但是不推荐$class = 'dangerous\\name'; // 推荐$class = "dangerous\\name"; // 推荐

看完了这篇文章,相信你对“PHP核心特性命名空间的示例分析”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网PHP编程频道,感谢各位的阅读!

--结束END--

本文标题: PHP核心特性命名空间的示例分析

本文链接: https://www.lsjlt.com/news/278414.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP核心特性命名空间的示例分析
    小编给大家分享一下PHP核心特性命名空间的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!提出PHP 在 5.3 后提出了命名空间用来解决组件之间的命名冲突问题,主要参考了文件系统的设计:同一个目录下不允许有相同的文...
    99+
    2023-06-15
  • PHP关键特性之命名空间的示例分析
    这篇文章主要介绍PHP关键特性之命名空间的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!你知道命名空间主要是为了解决代码中类和函数可能存在冲突的问题的吗?而这个特性其他语言一早就有,PHP则是姗姗来迟,它的出...
    99+
    2023-06-15
  • 如何理解PHP核心特性命名空间
    目录提出定义使用限定符在内部访问命名空间转义\符号提出 PHP 在 5.3 后提出了命名空间用来解决组件之间的命名冲突问题,主要参考了文件系统的设计: 同一个目录下不允许有...
    99+
    2022-11-12
  • namesapce命名空间的示例分析
    这篇文章主要介绍了namesapce命名空间的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.命名空间的使用目的   在PHP中函数、类、常量是不允许同名...
    99+
    2023-06-06
  • Flex命名空间的示例分析
    这篇文章主要介绍了Flex命名空间的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Flex命名空间详解通过命名空间可以控制所创建的属性和方法的可见性。请将public...
    99+
    2023-06-17
  • JavaScript命名空间模式的示例分析
    这篇文章将为大家详细讲解有关JavaScript命名空间模式的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下:前言命名空间可以被认为是唯一标识符下代码的逻...
    99+
    2022-10-19
  • VB.NET名字空间的示例分析
    小编给大家分享一下VB.NET名字空间的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!VB.NET名字空间在编写.NET软件时,我们会用到类和其他类型。为...
    99+
    2023-06-17
  • C++中的命名空间实例分析
    这篇“C++中的命名空间实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++中的命名空间实例分析”文章吧。命名空间的...
    99+
    2023-06-29
  • 关于PHP核心功能的示例分析
    关于PHP核心功能的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。PHP是我们一直都很关注的语言之一,随着PHP6的升级,它的功能也越来越强大,我们这里...
    99+
    2023-06-17
  • C++中名称空间的示例分析
    小编给大家分享一下C++中名称空间的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1.名称空间在C++当中,名称可以是变量、函数、结构体、枚举、类以及结构体和类的成员。这本身并没有问题,但随着项目的增大,名称之间相...
    99+
    2023-06-22
  • 网站空间漏洞名词解释的示例分析
    今天就跟大家聊聊有关网站空间漏洞名词解释的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 此次“勒索病毒”的入侵,使我们不得不多加以防范。对于一些有关网站空间中常见...
    99+
    2023-06-07
  • CentOS7.0命令更新新版特性的示例分析
    小编给大家分享一下CentOS7.0命令更新新版特性的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!查看系统版本信息#uname -a#cat /etc/...
    99+
    2023-06-10
  • ES6新特性之let和const命令的示例分析
    这篇文章主要介绍了ES6新特性之let和const命令的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:1. let 命令①...
    99+
    2022-10-19
  • jQuery选择器特殊字符与属性空格的示例分析
    这篇文章主要介绍了jQuery选择器特殊字符与属性空格的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、选择器中含有特殊符号的注意...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作