PHP的命名空间

ThinkPHP中使用namespace的问题 通过使用命名空间,我们可以更好地组织和管理我们的代码,避免命名冲突,并提高代码的可维护性。在实际应用中,我们可以创建命名空间、引入命名空间并使用其中的类、函数和常量。它允许我们在不同的命名空间中定义类、函数和常量,以避免命名冲突并提高代码的可维护性。Composer是一个PHP的依赖管理工具,它可以自动加载类文件,并解决类的依赖关系。它类似于文件系统中的文件夹,可以将相关的代码放在同一个命名空间下。在ThinkPHP应用中,我们可以通过创建命名空间来组织我们的代码。的文件夹,并将相关的代码文件放置其中。 阅读详情

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就相当于对应一个文件路径,查找这个类的时候,就会去对应的文件路径查找类定义文件了。

namespace的定义和使用

定义:

1
2
3
<?php
 
namespace Myproject;

或者

1
2
3
4
5
<?php
 
namespace Myproject {
 
}

使用:

1
2
3
<?php
 
use Myproject\School;

 

1
2
3
<?php
 
use Myproject\Schoolas School1;  // 别名

命名空间是运行时解析的。use就相当于一种声明,并不解析和加载。比如下面这个例子:

test.php

1
2
3
4
5
<?php
use my\name;
require_once("/home/yejianfeng/handcode/test/namespace1.php");
$a =new my\name\A();
$a->Print1();

namespace1.php

1
2
3
4
5
6
7
<?php
namespace my\name;
class A {
        public function Print1(){
                echo 11;
        }
}

虽然require_once在use下面,也是可以正常运行的,因为程序只有在new my\name\A()的时候才去加载命名空间my\name

全局类和命名空间类

如果要new一个全局类使用 new \A()

如果要new一个命名空间类,使用new my\namespace\A()

命名空间的顺序

自从有了命名空间之后,最容易出错的该是使用类的时候,这个类的寻找路径是什么样的了。

如果能弄清楚manual中的这个例子就能全部弄清楚寻找顺序了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php
namespace A;
use B\D, C\E as F;
 
// 函数调用
 
foo();     // 首先尝试调用定义在命名空间"A"中的函数foo()
            // 再尝试调用全局函数 "foo"
 
\foo();    // 调用全局空间函数 "foo"
 
my\foo();  // 调用定义在命名空间"A\my"中函数 "foo"
 
F();       // 首先尝试调用定义在命名空间"A"中的函数 "F"
            // 再尝试调用全局函数 "F"
 
// 类引用
 
new B();   // 创建命名空间 "A" 中定义的类 "B" 的一个对象
            // 如果未找到,则尝试自动装载类 "A\B"
 
new D();   // 使用导入规则,创建命名空间 "B" 中定义的类 "D" 的一个对象
            // 如果未找到,则尝试自动装载类 "B\D"
 
new F();   // 使用导入规则,创建命名空间 "C" 中定义的类 "E" 的一个对象
            // 如果未找到,则尝试自动装载类 "C\E"
 
new \B();  // 创建定义在全局空间中的类 "B" 的一个对象
            // 如果未发现,则尝试自动装载类 "B"
 
new \D();  // 创建定义在全局空间中的类 "D" 的一个对象
            // 如果未发现,则尝试自动装载类 "D"
 
new \F();  // 创建定义在全局空间中的类 "F" 的一个对象
            // 如果未发现,则尝试自动装载类 "F"
 
// 调用另一个命名空间中的静态方法或命名空间函数
 
B\foo();   // 调用命名空间 "A\B" 中函数 "foo"
 
B::foo();  // 调用命名空间 "A" 中定义的类 "B" 的 "foo" 方法
            // 如果未找到类 "A\B" ,则尝试自动装载类 "A\B"
 
D::foo();  // 使用导入规则,调用命名空间 "B" 中定义的类 "D" 的 "foo" 方法
            // 如果类 "B\D" 未找到,则尝试自动装载类 "B\D"
 
\B\foo();  // 调用命名空间 "B" 中的函数 "foo"
 
\B::foo(); // 调用全局空间中的类 "B" 的 "foo" 方法
            // 如果类 "B" 未找到,则尝试自动装载类 "B"
 
// 当前命名空间中的静态方法或函数
 
A\B::foo();  // 调用命名空间 "A\A" 中定义的类 "B" 的 "foo" 方法
              // 如果类 "A\A\B" 未找到,则尝试自动装载类 "A\A\B"
 
\A\B::foo(); // 调用命名空间 "A\B" 中定义的类 "B" 的 "foo" 方法
              // 如果类 "A\B" 未找到,则尝试自动装载类 "A\B"
?>
Thinkphp3.2版命名空间PHPExcel代码 thinkphp 3.2命名空间版 phpexcel下载 立即下载

相关推荐

thinkphp命名空间用法实例详解

本文实例讲述了thinkphp命名空间用法。分享给大家供大家参考,具体如下: 新版本(3.2)中采用命名空间的方式定义和加载类库文件,解决多个模块之间的冲突问题,并实现了更加高效的自动加载机制。 需要给类库定义所在的命名空间,命名空间的路径和类库文件的目录一致,就可以实现类的自动加载,例如Org\Util\File类的定义为 namespace Org\Util; class File { } 其所在的路径是ThinkPHP/Library/Org/Util/File.class.php,我们实例化该类写法如下: 复制代码 代码如下:$class = new \Org\Util\File(

require、include、require_once和use的区别/命名空间的使用方法

1、require、include require、include都是文件包含,不同的是require语句会输出错误信息,并且立即终止脚本处理。而include语句在没有找到文件时则会输出警告,不会终止脚本的处理。 2、require_once、include_once 含义同上,但如多次包含仅加载一次。 3、use、namespace use完全不同于require或者include,...

facing-screen's blog 3545

统一大型语言模型和知识图谱:路线图

大型语言模型(LLM),如ChatGPT和GPT4,由于其涌现能力和泛化性,正在自然语言处理和人工智能领域掀起新的浪潮。然而,LLM是黑箱模型,通常无法捕捉和获取事实知识。相反,知识图谱(KGs),例如维基百科和华普,是显式存储丰富事实知识的结构化知识模型。KGs可以通过为推理和可解释性提供外部知识来增强LLM。同时,KGs很难从本质上构建和演化,这对KGs中现有的生成新事实和表示未知知识的方法提出了挑战。因此,将LLM和KGs统一在一起并同时利用它们的优势是相辅相成的。

qq_32907491的博客 2842

thinkphp5 require_once 引入文件

require_once('../extend/Aip/AipNlp.php'); $client = new \AipNlp($APP_ID, $API_KEY, $SECRET_KEY);

退役熬夜选手的博客 1829

昆仑通态屏幕制作(连载1)---接触篇

写在开始 背景:最近出了做QT、LORA和4G,还做了一个屏幕。以前做了一个迪文的串口屏幕,发现网上的教程很多,所以连载就不更新了,并且迪文屏幕的设置什么的比较简单,应该从网上都能找到对应的教程。而现在用的昆仑通态的屏幕属于嵌入式屏幕,至于为啥叫嵌入式,也不是很明白,反正就是需要用这个屏幕,嵌入式不嵌入式不重要了。重要的是能用,并且能实现串口屏幕不能实现的功能。所以选定昆仑通态的一款屏幕。 文章语言:我比较习惯用比较糙的语言介绍做的东西,有时候不太准备,但是为了方便理解,还请大家谅解。用...

weixin_45426095的博客 6736

实测iOS和安卓大不同!用NFC触发小程序跳转的完整避坑指南(含NFC Tools配置)

本文深入解析iOS与安卓在NFC触发小程序跳转时的核心差异,提供微信与支付宝小程序的NFC实现方案及优化技巧。涵盖跨平台兼容性测试方法论、性能优化策略及异常处理方案,帮助开发者避开常见陷阱,提升跳转成功率。特别针对NFC Tools配置和微信Universal Link使用进行详细指导。

asdfghjkl978564的博客 434

ThinkPHP中的命名空间

命名空间概述 (PHP 5 >= 5.3.0, PHP 7) 什么是命名空间?从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件 foo.txt 可以同时在目录/home/greg 和 /home/other 中存在,但在同一个目录中不能存在两个 foo.tx

Yeoman92的博客 1099

单片机课程设计——交通灯

单片机课程设计——交通灯一、课程设计主要内容1.1 题目1.2摘要1.3关键词二、设计要求三、设计方案四、参考电路设计4.1.1数码管的设计4.1.2对应程序4.2.1独立按键的设计4.2.2对应程序4.2.3 使用逻辑4.3.1LED模块的设置4.3.2 LED实物图4.3.3 LED显示程序五、调试要点5.1 单片机最小系统5.2 数码管模块5.3 LED模块5.4 独立按键六、总结七、成品图完整程序 一、课程设计主要内容 1.1 题目 交通灯设计 1.2摘要 近年来,随着我国国民经济的快速发展,我国机

PKPROTEUS的博客 3万+

「PHP系列」PHP 命名空间详解

通过使用命名空间,你可以将相关的类、接口、函数和常量组合在一起,形成一个逻辑上的代码单元,从而避免不同库或框架中的类名冲突。在全局命名空间中定义的函数和常量在任何地方都可以访问,而无需使用命名空间前缀。通过使用命名空间和自动加载器,你可以轻松地加载和实例化任何命名空间中的类,而无需手动包含或引入文件。在 PHP 中,命名空间提供了一种封装类、接口、函数和常量的方式,以避免名称冲突,并更好地组织代码。但是,在命名空间中定义的函数和常量需要使用完整的命名空间路径来访问。关键字来声明一个命名空间。

日常笔记/总结/系列知识梳理 3209

【Cubietruck】Qt5.8.0 x64、x86、armhf三个版本的编译安装

一、       Preparation 以下环境配置支持虚拟机和实体机,但是实体机生产效率会相对高一点,实体机编译Qt的速度是虚拟机两倍以上。 若使用虚拟机,推荐使用VirtualBox,开源免费,尽量不要使用Vmware破解版。   Download List   名称 链接 下载项目 OS https://mirro

beatfan的博客 3658

C/C++李峋同款跳动的爱心代码(完整代码)

C++语言实现出李峋同款跳动的爱心的完整代码。

AIGC 10万+

PHP命名空间详解

今天这篇文章的篇幅有点长,小编在这里给大家整理了一下文章的框架,宝宝们可以根据自身的需要选择性的阅读,好啦,话不多说,让我们开始吧! 这篇文章的框架如下: 命名空间的定义 PHP 命名空间(namespace)是在PHP 5.3中加入的,对于学过C++的宝宝们,那命名空间就不算什么新事物了。 不过命名空间在PHP当中还是相当重要的。 PHP 命名空间可以解决以下两类问题: 1.用户编写的代码与...

qq_wxq的博客 4826

【从零开始学习 UVM】1.2、UVM 概述 —— UVM Installation(UVM 安装)

【从零开始学习 UVM】1.2、UVM 概述 —— UVM Installation(UVM 安装)

努力,加油每一天鸭~ 1944

php命名空间

一、概述 1、场景: 我们在电脑上的文件夹中创建文件文件时,文件名称不能是重复的,否则将不能创建;这是为了保证我们的资源访问标识是唯一的,当我们通过资源访问路径访问我们的文件时能定位到是哪个文件;那么我们如果需要创建相同的文件名文件时,我们就需要先创建文件夹,然后将我们的文件放置其中,这里的文件夹作用就是命名空间的理解。 ​ 2、主要为解决以下问题 1、用户编写的代码与PHP源码或者第三方的源码(类、函数、常量)之间的名字冲突。 2、为了解决很长的标识符名称(一般由于第一个问题,定义的名称),提高代码的可读

sinat_35451964的博客 1367

Arcgis建筑面shp由DSM和DEM获取高度拉伸并可视化

Arcgis建筑面shp由DSM和DEM获取高度拉伸并可视化

yilvyangguang520的博客 3991

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

php中命名空间重要吗,关于php:PHP中命名空间是怎样的存在一

命名空间其实早在PHP5.3就曾经呈现了。不过大部分同学可能在各种框架的应用中才会接触到命名空间的内容,当然,现代化的开发也都离不开这些可能疾速产出的框架。这次咱们不从框架的角度,仅从简略的代码角度来解析一下命名空间的概念和应用。首先,咱们要定义命名空间是个什么货色。其实就像操作系统的目录一样,命名空间就是为了解决相似于操作系统中同一个文件夹不能有雷同的文件名一样的问题。假如咱们只有一个文件,一个...

weixin_29038303的博客 164

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

PHP命名空间

简介 为了避免代码中自定义的类、函数、常量等标识符,与PHP内置或第三方库中的已有标识符重名导致冲突,PHP从5.3版本开始支持命名空间,旨在给原本同名的标识符加上命名空间前缀,从而在代码中区分它们。 命名空间实际上是解决上述问题的一种思想和方案,许多高级语言都提供了不同形式的支持。接下来,本文从简入手,介绍PHP命名空间的基础。 定义命名空间 定义命名空间的最简单形式,是在PHP代码开头,通过namespace关键字声明,指定该文件中自定义的类、函数、常量标识符均属于声明的命名空间之下。例如.

Germanknight的专栏 407

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

PHP命名空间函数详解

本文全面介绍了PHP命名空间的函数特性与应用。首先解释了命名空间的概念、作用及基本语法,详细讲解了命名空间函数的定义与多种调用方式。文章深入探讨了子命名空间、别名导入、动态调用等高级功能,以及PSR-4自动加载标准。提供了常见问题的解决方案和实用技巧,并结合Laravel和Symfony框架展示了实际应用案例。最后总结了命名空间的最佳实践,包括合理规划结构、遵循PSR标准、保持一致性等建议,帮助开发者构建更健壮的大型应用程序。

独立开发者阿乐 — AI 搜索优化(GEO)· 全栈开发 · 站点增长实战 995

PHP 命名空间

从PHP5.3.0开始引入命名空间的概念,那么命名空间是什么、为什么要使用命名空间、怎么使用命名空间呢?下面就给大家简单的讲解一下,相信读完这篇文章大家能对命名空间有比较清楚的认识。 一、命名空间是什么? 命名空间是现代PHP特性之一,从PHP5.3.0开始引入,其作用是将PHP代码按照一种虚拟的层次结构进行组织,这种结构类似于操作系统中文件系统的目录结构。下...

weixin_33767813的博客 291

PHP中的命名空间是如何使用的?

通过使用。

破损的天堂鸟博客 1083

说说PHP中的命名空间相关概念

说说PHP中的命名空间相关概念 1. PHP中的命名空间是什么? 什么是命名空间?“从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件 foo.txt 可以同时在目录/home/greg 和 /home/other 中存在,但在同一个目录中不能

u011252402的专栏 3361
上一篇: meta标签
下一篇: java中的代码块理解
HackProgramer
博客等级 码龄12年 255粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值