PHP namespace 命名空间详解

在这里中我们介绍了php教程命名空间的用途和namespace关键字,在这篇文章中我们将介绍一下use命令的使用以及php如何解析命名空间的名字的。

namespace bakbaba;
function bab(){
    echo "bi";
}
namespace kkk;
function k1(){
    echo "k1";
}

bakbababab();//在kkk的命名空间下使用别的命名空间,注意前面的
use bakbaba as b;//依旧在kkk的命名空间下,但是用别名的的时候以下方法也正确
#use bakbaba as b;//前面可以不使用号
bbab();//使用别名下命名空间的时候前面不该有号
k1();//调用该函数没有报错,说明use不影响当前当前命名空间

 

< ?php  
// application library 1  
namespace applib1;  
const myconst = 'applib1myconst';  
function myfunction() {  
 return __function__;  
}  
class myclass {  
 static function whoami() {  
eturn __method__;  
 }  
}  
?>
 

lib2.php
< ?php  
// application library 2  
namespace applib2;  
 
const myconst = 'applib2myconst';  
 
function myfunction() {  
 return __function__;  
}  
 
class myclass {  
 static function whoami() {  
eturn __method__;  
 }  
}  
?> 

幸好在手册中发现这么一段代码,故手册中其他关于namespace的内容,就可以忽略了,直接看下面的代码

 

<?php
namespace a;
use bd, ce as f;

// 函数调用

foo();      // 首先尝试调用定义在命名空间"a"中的函数foo()
            // 再尝试调用全局函数 "foo"

foo();     // 调用全局空间函数 "foo"

myfoo();   // 调用定义在命名空间"amy"中函数 "foo"

f();        // 首先尝试调用定义在命名空间"a"中的函数 "f"
            // 再尝试调用全局函数 "f"

// 类引用

new b();    // 创建命名空间 "a" 中定义的类 "b" 的一个对象
            // 如果未找到,则尝试自动装载类 "ab"

new d();    // 使用导入规则,创建命名空间 "b" 中定义的类 "d" 的一个对象
            // 如果未找到,则尝试自动装载类 "bd"

new f();    // 使用导入规则,创建命名空间 "c" 中定义的类 "e" 的一个对象
            // 如果未找到,则尝试自动装载类 "ce"

new b();   // 创建定义在全局空间中的类 "b" 的一个对象
            // 如果未发现,则尝试自动装载类 "b"

new d();   // 创建定义在全局空间中的类 "d" 的一个对象
            // 如果未发现,则尝试自动装载类 "d"

new f();   // 创建定义在全局空间中的类 "f" 的一个对象
            // 如果未发现,则尝试自动装载类 "f"

// 调用另一个命名空间中的静态方法或命名空间函数

bfoo();    // 调用命名空间 "ab" 中函数 "foo"

b::foo();   // 调用命名空间 "a" 中定义的类 "b" 的 "foo" 方法
            // 如果未找到类 "ab" ,则尝试自动装载类 "ab"

d::foo();   // 使用导入规则,调用命名空间 "b" 中定义的类 "d" 的 "foo" 方法
            // 如果类 "bd" 未找到,则尝试自动装载类 "bd"

bfoo();   // 调用命名空间 "b" 中的函数 "foo"

b::foo();  // 调用全局空间中的类 "b" 的 "foo" 方法
            // 如果类 "b" 未找到,则尝试自动装载类 "b"

// 当前命名空间中的静态方法或函数

ab::foo();   // 调用命名空间 "aa" 中定义的类 "b" 的 "foo" 方法
              // 如果类 "aab" 未找到,则尝试自动装载类 "aab"

ab::foo();  // 调用命名空间 "ab" 中定义的类 "b" 的 "foo" 方法
              // 如果类 "ab" 未找到,则尝试自动装载类 "ab"
?>

时间: 2024-07-29 13:15:06

PHP namespace 命名空间详解的相关文章

Visual C#命名空间详解

visual|命名空间|详解 命名空间提供了一种组织相关类和其他类型的方式.与文件或组件不同,命名空间是一种逻辑组合,而不是物理组合.在C#文件中定义类时,可以把它包括在命名空间定义中.以后,在定义另一个类,在另一个文件中执行相关操作时,就可以在同一个命名空间中包含它,创建一个逻辑组合,告诉使用类的其他开发人员这两个类是如何相关的以及如何使用它们: namespace CustomerPhoneBookApp{ using System; public struct Subscriber { /

Thinkphp 空操作、空控制器、命名空间(详解)

1.空操作 空操作是指系统在找不到请求的操作方法的时候,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化. http://网址/index.php/Home/Main/login http://网址/index.php/Home/Main/hello 空操作 出现页面: 显示的错误信息过于详细,为安全以及优化页面起见,实行空操作 1.做一个_empty()方法.要在子类里面写,不要再父类里(推荐使用) function _empty() { echo

Python命名空间详解_python

通俗的来说,Python中所谓的命名空间可以理解为一个容器.在这个容器中可以装许多标识符.不同容器中的同名的标识符是不会相互冲突的.理解python的命名空间需要掌握三条规则: 第一,赋值(包括显式赋值和隐式赋值)产生标识符,赋值的地点决定标识符所处的命名空间. 第二,函数定义(包括def和lambda)产生新的命名空间. 第三,python搜索一个标识符的顺序是"LEGB". 所谓的"LEGB"是python中四层命名空间的英文名字首字母的缩写. 最里面的一层是L

C#命名空间详解

命名空间提供了一种组织相关类和其他类型的方式.与文件或组件不同,命名空间是一种逻辑组合,而不是物理组合.在C#文件中定义类时,可以把它包括在命名空间定义中.以后,在定义另一个类,在另一个文件中执行相关操作时,就可以在同一个命名空间中包含它,创建一个逻辑组合,告诉使用类的其他开发人员这两个类是如何相关的以及如何使用它们: namespace CustomerPhoneBookApp { using System; public struct Subscriber { // Code for str

Linux的命名空间详解--Linux进程的管理与调度(二)

命名空间概念 传统上,在Linux以及其他衍生的UNIX变体中,许多资源是全局管理的. 例如,系统中的所有进程按照惯例是通过PID标识的,这意味着内核必须管理一个全局的PID列表.而且,所有调用者通过uname系统调用返回的系统相关信息(包括系统名称和有关内核的一些信息)都是相同的.用户ID的管理方式类似,即各个用户是通过一个全局唯一的UID号标识. 全局ID使得内核可以有选择地允许或拒绝某些特权.虽然UID为0的root用户基本上允许做任何事,但其他用户ID则会受到限制.例如UID为n 的用户

thinkPHP5.0框架命名空间详解

本文实例讲述了thinkPHP5.0框架命名空间.分享给大家供大家参考,具体如下: 命名空间 ThinkPHP采用命名空间方式定义和自动加载类库文件,有效的解决了多模块和Composer类库之间的命名空间冲突问题,并且实现了更加高效的类库自动加载机制. 如果不清楚命名空间的基本概念,可以参考PHP手册:PHP命名空间 特别注意的是,如果你需要调用PHP内置的类库,或者第三方没有使用命名空间的类库,记得在实例化类库的时候加上 \,例如: // 错误的用法 $class = new stdClass

jQuery中绑定事件的命名空间详解_jquery

在没有看到这篇 文章之前,我一直不知道原来bind也可以有命名空间.事实上,我看完这篇文章后,再去翻了一下手册,也才发现了一点点的注释.但手册也仅仅是一句话就带 过去了.没有过多的深究,或许他认为命名空间这玩意很简单,没有必要多解释? 先看手册,由于bind方法有三个参数(type,[data],fn),所以手册上这么介绍: .bind() 方法是用于往文档上附加行为的主要方式.所有JavaScript事件对象, 比如focus, mouseover, 和 resize,都是可以作为type参数

struts2配置详解(struts.xml配置详解)

本文转自:http://www.cnblogs.com/fmricky/archive/2010/05/20/1740479.html   struts.xml是我们在开发中利用率最高的文件,也是Struts2中最重要的配置文件. 一下分别介绍一下几个struts.xml中常用到的标签 1.<include> 利用include标签,可以将一个struts.xml配置文件分割成多个配置文件,然后在struts.xml中使用<include>标签引入其他配置文件. 比如一个网上购物程

thinkPHP5.0框架模块设计详解

本文实例讲述了thinkPHP5.0框架模块设计.分享给大家供大家参考,具体如下: 5.0版本对模块的功能做了灵活设计,默认采用多模块的架构,并且支持单一模块设计,所有模块的命名空间均以app作为根命名空间(可配置更改). 目录结构 标准的应用和模块目录结构如下: ├─application           应用目录(可设置) │  ├─common             公共模块目录(可选) │  ├─common.php         公共函数文件 │  ├─route.php