php中命名空间的使用
简单使用
命名空间主要解决函数/类冲突的问题。由于PHP中中不允许函数重载,所以我们要使用的到命名空间的。先看一个简单的例子。
<?php
namespace A;
public function test(){
return "hello";
}
namespace B;
public function test(){
return 'world';
}
echo test();
如果我们不加命名空间,则php就会报错。加了之后,上面的输出结果如下:

这是因为在函数调用时候,会采用就近原则来使用命名空间,所以会调用空间B下的test()函数。如果需要使用A中的test,则需要采用下面的方式。
echo \A\test();
子空间使用
命名空间采用的是树形结构,根节点为空。如\A\test()表示访问跟根节点下的A空间下的Test方法。当然,还可以在某个空间下继续定义空间,我们称之为子空间。
<?php
namespace A;
function test(){
return "hello";
}
namespace B;
function test(){
return 'world';
}
namespace A\C;
function test(){
return "!";
}
echo \A\C\test();
在A空间下有定义了一个C空间,我们想要使用C空间下的test()方法,则test()前面加上空间的绝对路径即可。
注意在定义空间时也应该使用绝对定位,比如想要在C下再定义一个子空间,那么应该是 namespace A\C\D ,而不是 namespace C\D
空间引入
在调用别的空间下的函数时,需要加上绝对路径。如果路径很长则书写代码不方便。为了简化操作,我们可以通过引入空间来调用函数。
<?php
namespace A;
function test(){
return "hello";
}
namespace A\C\D\E;
function test(){
return "!";
}
namespace B;
function test1(){
return 'world';
}
function test2(){
return '!!!';
}
use A\C\D\E;
echo E\test();
在代码种定义了一个多级空间A\C\D\E,如果不引入空间的话则需要这样来调用 echo \A\C\D\E\test() ,当我们引入空间后调用就方便了许多。
如果某个空间下定义了类,还可以直接将该类引入。
<?php
namespace A;
function test(){
return "hello";
}
/**
*
*/
class Person{
static $name = 'ff';
}
namespace A\C\D\E;
function test(){
return "!";
}
namespace B;
function test1(){
return 'world';
}
function test2(){
return '!!!';
}
use A\C\D\E;
echo E\test();
use A\Person;
echo Person::$name;
直接将Person类引入,然后访问其静态成员。
公共空间
如果PHP脚本文件中没有定义空间,那么其空间被认为是公共空间。
- 公共空间引入自定义空间
<?php
require_once 'custom.php'; function test(){
return 'aa';
} echo \A\test();
调用custom.php文件中A空间下的test()方法。
- 自定义空间引入公共空间
<?php
namespace A;
require_once 'test.php';
function test(){
return '!!!';
} echo \test();
当前的空间是A空间,这里调用公共空间下的test()方法。
注意:如果要使用namespace,则namspace必须是第一行代码。
define定义的常量不受命名空间的限制
php中命名空间的使用的更多相关文章
- php中命名空间和use
php中命名空间和use 总结 php中的namespace就有点像java中package包的概念 php中的use的概念就是用别人的命名空间中的类 php中的include enquire是引入文 ...
- C#中命名空间,C#程序中的一种代码组织形式,主要用来标识类的可以范围,引用using 命名空间
C# C#中命名空间,C#程序中的一种代码组织形式,主要用来标识类的可以范围 use system; use system.collect.core; namespace sss{ } using 命 ...
- TypeScript 中命名空间与模块的理解?区别?
一.模块 TypeScript 与ECMAScript 2015 一样,任何包含顶级 import 或者 export 的文件都被当成一个模块 相反地,如果一个文件不带有顶级的import或者expo ...
- spring-mvc.xml与spring-mybatis.xml配置文件中命名空间问题
首先贴出配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="htt ...
- Python中命名空间与作用域使用总结
1 引言 命名空间与作用域是程序设计中的基础概念,深入理解有助于理解变量的生命周期,减少代码中的莫名其妙bug.Python的命名空间与作用域与Java.C++等语言有很大差异,若不注意,就可能出现莫 ...
- C#中命名空间别名的使用
C#中使用命名空间来分割不同的层级,在不同的层级中可以使用相同的类声明和变量声明.在程序中使用不同命名空间的下的相同名称的类时:可以用一下这几种方法进行限定: 1.使用完全限定名 using Syst ...
- 详解C++中命名空间的意义和用法
看过鸡啄米的C++编程入门系列教程的朋友,应该能注意到,在其中的很多实例中,都有这么一条语句:using namespace std;,即使用命名空间std,其作用就是规定该文件中使用的标准库函数都是 ...
- 关于c++中命名空间namespace
一.定义命名空间: 步骤一:在.h文件中:namespace ns{.......}//将定义的类和全局变量,全局函数写入花括号内. 步骤二:在.cpp文件中: using namespace ns ...
- php中命名空间namespace和use
对于面向对象编程而言,命名空间namespace和use的概念非常重要. 1.根命名空间是反斜线 \ ,有点类似linux中的根目录 / 的那种感觉,但使用var_dump()函数打印时其实是空字符串 ...
随机推荐
- IE11的API变化
IE11已经登录Win8.1,它的API有了很大变更 一.User-agent字符串的更改 IE10的是 Mozilla/5.0 (compatible; MSIE 10.0; Windows NT ...
- Linux traceroute
一.简介 traceroute 通过发送 TCP 数据包向目标端口进行探测,以检测源到目标服务器的整个链路上相应端口的连通性情况. 二.语法 -n 直接使用IP地址而非主机名称(禁用 DNS 反查 ...
- hadooop2.6 job pending research
https://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/ClusterSetup.html 我使用的是已经运行在 ...
- CORDIC原理与FPGA实现(1)
CORDIC算法的来历与用途大家网上随处可以见到,这里写 一下自己的理解. 将P(x,y)旋转角度a得到新的坐标P’(x’,y’).这里的坐标变换为: x’= x cos(a) – y sin(a) ...
- listview中OnItemClick方法各个参数的作用
OnItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) 1.arg0,arg2 m_listview.setOnI ...
- DP+单调队列 codevs 1748 瑰丽华尔兹(还不是很懂具体的代码实现)
codevs 1748 瑰丽华尔兹 2005年NOI全国竞赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 题目描述 Descripti ...
- 怎样用ZBrush中的Curves和Insert笔刷创建四肢
之前的ZBrush教程给大家介绍了人体结构比例和肌肉走向,同时使用ZBrush®软件中的CuverTube笔刷为模型添加了颈部和手臂.使用InsertSphere笔刷添加腰部,本讲将继续使用Curv ...
- ZOJ 2674 Strange Limit
欧拉函数. #include<iostream> #include<stdio.h> #include<string.h> #include<algorith ...
- Android Sdk 和ADT Eclipse安装配置步骤
由于我们之前下载的jdk版本是1.6的,所以后面的andriod sdk等版本需要相对应.安装文件我都放在云盘里面,需要的可以下载 一:如果单独安装每一个软件,先期需要下载的软件包如下: 1.JDK ...
- Notepad++中NppExec的使用之一:基本用法
一直用NPP,很长时间了,最近才学习它的各种插件,这篇文章是根据NppExec的用户指南写的.很多地方是翻译的,但不全是翻译,同时也有些东西没有翻译. 一.何为NppExec 简单的说,这个插件可以让 ...