php中命名空间的使用

时间:2021-02-22 00:06:52

简单使用


命名空间主要解决函数/类冲突的问题。由于PHP中中不允许函数重载,所以我们要使用的到命名空间的。先看一个简单的例子。

<?php

    namespace A;
public function test(){
return "hello";
} namespace B;
public function test(){
return 'world';
} echo test();

如果我们不加命名空间,则php就会报错。加了之后,上面的输出结果如下:

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中命名空间的使用的更多相关文章

  1. php中命名空间和use

    php中命名空间和use 总结 php中的namespace就有点像java中package包的概念 php中的use的概念就是用别人的命名空间中的类 php中的include enquire是引入文 ...

  2. C&num;中命名空间,C&num;程序中的一种代码组织形式,主要用来标识类的可以范围,引用using 命名空间

    C# C#中命名空间,C#程序中的一种代码组织形式,主要用来标识类的可以范围 use system; use system.collect.core; namespace sss{ } using 命 ...

  3. TypeScript 中命名空间与模块的理解?区别?

    一.模块 TypeScript 与ECMAScript 2015 一样,任何包含* import 或者 export 的文件都被当成一个模块 相反地,如果一个文件不带有*的import或者expo ...

  4. spring-mvc&period;xml与spring-mybatis&period;xml配置文件中命名空间问题

    首先贴出配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="htt ...

  5. Python中命名空间与作用域使用总结

    1 引言 命名空间与作用域是程序设计中的基础概念,深入理解有助于理解变量的生命周期,减少代码中的莫名其妙bug.Python的命名空间与作用域与Java.C++等语言有很大差异,若不注意,就可能出现莫 ...

  6. C&num;中命名空间别名的使用

    C#中使用命名空间来分割不同的层级,在不同的层级中可以使用相同的类声明和变量声明.在程序中使用不同命名空间的下的相同名称的类时:可以用一下这几种方法进行限定: 1.使用完全限定名 using Syst ...

  7. 详解C&plus;&plus;中命名空间的意义和用法

    看过鸡啄米的C++编程入门系列教程的朋友,应该能注意到,在其中的很多实例中,都有这么一条语句:using namespace std;,即使用命名空间std,其作用就是规定该文件中使用的标准库函数都是 ...

  8. 关于c&plus;&plus;中命名空间namespace

    一.定义命名空间: 步骤一:在.h文件中:namespace  ns{.......}//将定义的类和全局变量,全局函数写入花括号内. 步骤二:在.cpp文件中: using namespace ns ...

  9. php中命名空间namespace和use

    对于面向对象编程而言,命名空间namespace和use的概念非常重要. 1.根命名空间是反斜线 \ ,有点类似linux中的根目录 / 的那种感觉,但使用var_dump()函数打印时其实是空字符串 ...

随机推荐

  1. Ubuntu 14&period;04 64bit 安装tensorflow(GPU版本)

    本博客主要用于在Ubuntu14.04 64bit 操作系统上搭建google开源的深度学习框架tensorflow. 0.安装CUDA和cuDNN 如果要安装GPU版本的tensorflow,就必须 ...

  2. C指针-const char&ast; p到底是什么不可以改变

    char a = 'w'; char b = 'q'; const char* p = &a; p = &b; printf("%c",p[0]); 如上一段代码, ...

  3. iperf交叉编译:

    下载:http://sourceforge.net/projects/iperf 1. 先把iperf-2.0.4.tar.gz解压到你的目录下.2. cd iperf-2.0.43. ./confi ...

  4. ng-template寄宿方式

    如果你是一个angular的开发者的话,对于ng-html2js你应该 很熟悉.对于angular的指令,我们经常需要定义模板( directive template/templateUrl),你可以 ...

  5. React入门--------组件的生命周期

    Mounting/组件挂载相关: componentWillMount componentDidMount Updating/组件更新相关: componentWillReceiveProps sho ...

  6. Xcode使用xib拖线时出现: could not insert new outlet connection

    解决方法: 1.在新建类的时候没有选择将这个类加入到对应的"Target"中. 2.重新将文件加入项目 操作步骤就是选中出问题的.m和.h文件,点删除键,然后选"Remo ...

  7. 如何利用putty的密钥登陆

    1.登陆主机,输入:mkdir /root/.ssh(创建SSH密钥目录) touch /root/.ssh/authorized_keys (创建SSH密钥文件):   2.输入:vi /root/ ...

  8. easyui帮助文档地址

    http://www.jeasyui.com/documentation/index.php# http://www.jeasyui.net/tutorial/22.html http://www.j ...

  9. datetime 计算时间差

    计算时间差: .date()       # 格式化 .timedelta()         # 时间差 import datetime # 今天 today = datetime.datetime ...

  10. div轮流滚动显示

    window.onload = function(){ var _box1 = document.getElementById("box1"); var _box2 = docum ...