PHP namespace 命名空间 函数调用 类引用 详细测试分析

本文测试中,假设index.php页面和test.php页面在同一个根目录下,方便加载test.php页面。

前提条件都是在namespace A;下进行测试。namespace A;

use B\D, C\E as F;

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

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

my\foo();   // 调用定义在命名空间"A\my"中函数 "foo"

F();        // 首先尝试调用定义在命名空间"A"中的函数 "F"

B\foo();    // 调用命名空间 "A\B" 中函数 "foo"

B::foo();   // 调用命名空间 "A" 中定义的类 "B" 的 "foo" 方法

D::foo();   // 使用导入规则,调用命名空间 "B" 中定义的类 "D" 的 "foo" 方法

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

\B::foo();  // 调用全局空间中的类 "B" 的 "foo" 方法

A\B::foo();   // 调用命名空间 "A\A" 中定义的类 "B" 的 "foo" 方法

\A\B::foo();  // 调用命名空间 "A\B" 中定义的类 "B" 的 "foo" 方法

//类引用

new B();    // 创建命名空间 "A" 中定义的类 "B" 的一个对象

new D();    // 使用导入规则,创建命名空间 "B" 中定义的类 "D" 的一个对象

new F();    // 使用导入规则,创建命名空间 "C" 中定义的类 "E" 的一个对象

new \B();   // 创建定义在全局空间中的类 "B" 的一个对象

new \D();   // 创建定义在全局空间中的类 "D" 的一个对象

new \F();   // 创建定义在全局空间中的类 "F" 的一个对象

函数调用

1当前命名空间A下函数调用 语法 foo();

index.php页面<?php

namespace A;

header("content-type:text/html;charset=utf-8");

require 'test.php';//加载定义命名空间"A\my"的页面

function foo(){

echo '我是命名空间"A"中的函数foo()';

}

// 函数调用

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

// 再尝试调用全局函数 "foo"

结果为我是命名空间"A"中的函数foo()

2当前命名空间A下调用命名空间"A\my"中的函数foo()  语法 my\foo();

index.php页面<?php

namespace A;

header("content-type:text/html;charset=utf-8");

require 'test.php';//加载定义命名空间"A\my"的页面

//调用函数

my\foo();   // 调用定义在命名空间"A\my"中函数 "foo"

?>

test.php页面(定义命名空间"A\my"的页面)<?php

namespace A\my;

function foo(){

echo '我是命名空间"A\my"中的函数foo()';

}

?>

结果为

我是命名空间"A\my"中的函数foo()

3.当前命名空间A下调用命名空间 "A\B"的函数"foo"

语法

require 'test.php';//加载命名空间 "A\B"的函数"foo"文件

B\foo();

index.php页面<?php

namespace A;

header("content-type:text/html;charset=utf-8");

use B\D, C\E as F;

require 'test.php';//加载命名空间 "A\B"的函数"foo"文件

B\foo();    // 调用命名空间 "A\B" 中函数 "foo"

?>

test.php页面(定义命名空间 "A\B"的函数"foo"的页面)<?php

namespace A\B;

function foo(){

echo '命名空间 "A\B" 中函数 "foo"';

}

?>

结果为命名空间 "A\B" 中函数 "foo"

4.当前命名空间A下调用本命名空间 "A" 中定义的类 "B" 的 "foo" 静态方法

语法

B::foo();

index.php页面<?php

namespace A;

header("content-type:text/html;charset=utf-8");

use B\D, C\E as F;

class B{

static  public function foo(){

echo '命名空间 "A" 中定义的类 "B" 的 "foo" 方法';

}

}

B::foo();   // 调用命名空间 "A" 中定义的类 "B" 的 "foo" 方法

// 如果未找到类 "A\B" ,则尝试自动装载类 "A\B"

?>

结果为命名空间 "A" 中定义的类 "B" 的 "foo" 方法

5.当前命名空间A下调用本命名空间 "B" 中定义的类 "D" 的 "foo" 静态方法

语法

require 'test.php';   //加载文件

use B\D;                //引导类

D::foo();                //进行调用

index.php页面<?php

namespace A;

header("content-type:text/html;charset=utf-8");

require 'test.php';

use B\D, C\E as F;

D::foo();   // 使用导入规则,调用命名空间 "B" 中定义的类 "D" 的 "foo" 方法

// 如果类 "B\D" 未找到,则尝试自动装载类 "B\D"

?>

test.php页面(定义命名空间 "B"的类"D"的函数"foo"的页面)<?php

namespace B;

class D{

static public function foo(){

echo '命名空间 "B" 中定义的类 "D" 的 "foo" 方法';

}

}

?>

结果为命名空间 "B" 中定义的类 "D" 的 "foo" 方法

6.当前命名空间A下调用命名空间 "B"的函数"foo"

语法

require 'test.php';//加载命名空间 "B"的函数"foo"文件

\B\foo();

index.php页面<?php

namespace A;

header("content-type:text/html;charset=utf-8");

use B\D, C\E as F;

require 'test.php';//加载命名空间 "B"的函数"foo"文件

\B\foo();    // 调用命名空间 "B" 中函数 "foo"

?>

test.php页面(定义命名空间 "B"的函数"foo"的页面)<?php

namespace B;

function foo(){

echo '命名空间 "B" 中函数 "foo"';

}

?>

结果为命名空间 "B" 中函数 "foo"

7.当前命名空间A下调用全局空间 "B"的函数"foo"静态方法

语法

require 'test.php';//加载全局空间 "B"的函数"foo"文件

\B::foo();

index.php页面<?php

namespace A;

header("content-type:text/html;charset=utf-8");

use B\D, C\E as F;

require 'test.php';//加载全局空间 "B"的函数"foo"文件

\B::foo();  // 调用全局空间中的类 "B" 的 "foo" 方法

// 如果类 "B" 未找到,则尝试自动装载类 "B"

?>

test.php页面(定义全局空间 "B"的函数"foo"的页面)<?php

class B{

static public function foo(){

echo '全局空间的B类中foo方法';

}

}

?>

结果为全局空间的B类中foo方法

8.当前命名空间A下调用命名空间 "A\A"的B类"foo"静态方法

语法

require 'test.php';//加载命名空间 "A\A"的B类"foo"静态方法文件

A\B::foo();

index.php页面<?php

namespace A;

header("content-type:text/html;charset=utf-8");

use B\D, C\E as F;

require 'test.php';//加载命名空间 "A\A"的B类"foo"静态方法文件

A\B::foo();   // 调用命名空间 "A\A" 中定义的类 "B" 的 "foo" 方法

// 如果类 "A\A\B" 未找到,则尝试自动装载类 "A\A\B"

?>

test.php页面(定义命名空间 "A\A"的B类"foo"静态方法的页面)<?php

namespace A\A;

class B{

static public function foo(){

echo '命名空间A\A中B类foo方法';

}

}

?>

结果为命名空间A\A中B类foo方法

9.当前命名空间A下调用命名空间 "A\B"的B类"foo"静态方法

语法

require 'test.php';//加载命名空间 "A\B"的B类"foo"静态方法文件

\A\B::foo();

index.php页面<?php

namespace A;

header("content-type:text/html;charset=utf-8");

require 'test.php';//加载命名空间 "A\B"的B类"foo"静态方法文件

\A\B::foo();  // 调用命名空间 "A\B" 中定义的类 "B" 的 "foo" 方法

// 如果类 "A\B" 未找到,则尝试自动装载类 "A\B"

?>

test.php页面(定义命名空间 "A\B"的B类"foo"静态方法的页面)<?php

namespace A\B;

class B{

static public function foo(){

echo '命名空间A\B中B类的foo静态方法';

}

}

?>

结果为命名空间A\B中B类的foo静态方法

类引用

1当前命名空间A下本空间类引用  语法 $b=new B();

index.php页面<?php

namespace A;

header("content-type:text/html;charset=utf-8");

use B\D, C\E as F;

class B{

public $name='我是命名空间 "A" 中定义的类 "B" 的一个对象';

}

$b=new B();    // 创建命名空间 "A" 中定义的类 "B" 的一个对象

// 如果未找到,则尝试自动装载类 "A\B"

echo $b->name;

结果为我是命名空间 "A" 中定义的类 "B" 的一个对象

2当前命名空间A下命名空间 "B" 中定义的类 "D"引用

语法

use B\D        //导入命名空间B中的D类

$b=new D();

index.php页面<?php

namespace A;

header("content-type:text/html;charset=utf-8");

use B\D, C\E as F;

require 'test.php';//加载命名空间B中的D类的文件

$d=new D();    // 使用导入规则,创建命名空间 "B" 中定义的类 "D" 的一个对象

// 如果未找到,则尝试自动装载类 "B\D"

echo $d->name;

?>

test.php页面(定义命名空间B中D类的页面)<?php

namespace B;

class D{

public $name='命名空间B中D类';

}

?>

结果为命名空间B中D类

3当前命名空间A下命名空间 "C" 中定义的类 "E"引用

语法

use C\E as F        //导入命名空间C中的E类  F为命名空间 "C" 中定义的类 "E"的别名

$b=new F();

index.php页面<?php

namespace A;

header("content-type:text/html;charset=utf-8");

use B\D, C\E as F;

require 'test.php';//加载命名空间C中的E类的文件

$f=new F();    // 使用导入规则,创建命名空间 "C" 中定义的类 "E" 的一个对象

// 如果未找到,则尝试自动装载类 "C\E"

echo $f->name;

?>

test.php页面(定义命名空间C中E类的页面)<?php

namespace C;

class E{

public $name='命名空间C中E类';

}

?>

结果为命名空间C中E类

4当前命名空间A下全局空间中定义的类 "B","D" "F"引用

语法

require 'test.php';//加载全局空间中定义的类 "B","D" "F"文件

$b=new \B();  //    \  表示绝对路径引用  全局空间中定义的类

$d=new \D();

$f=new \F();

index.php页面<?php

namespace A;

header("content-type:text/html;charset=utf-8");

use B\D, C\E as F;

require 'test.php';//加载全局空间中定义的类 "B","D" "F"文件

$b=new \B();   // 创建定义在全局空间中的类 "B" 的一个对象

// 如果未发现,则尝试自动装载类 "B"

$d=new \D();   // 创建定义在全局空间中的类 "D" 的一个对象

// 如果未发现,则尝试自动装载类 "D"

$f=new \F();   // 创建定义在全局空间中的类 "F" 的一个对象

// 如果未发现,则尝试自动装载类 "F"

echo $b->name;

echo '
';

echo $d->name;

echo '
';

echo $f->name;

?>

test.php页面(全局空间中定义的类 "B","D" "F"的页面)<?php

class B{

public $name='全局空间的类B';

}

class D{

public $name='全局空间的类D';

}

class F{

public $name='全局空间的类F';

}

?>

结果为全局空间的类B

全局空间的类D

全局空间的类F

附录<?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"

?>

php 命名空间 函数调用,PHP 命名空间 namespace 函数调用 类引用 详解相关推荐

  1. sstream类的详解

     sstream类的详解             sstream类详细介绍 C++引入了ostringstream.istringstream.stringstream这三个类,要使用他们创建对象 ...

  2. .net System.Web.Caching.Cache缓存类使用详解(转载)

    转自:http://www.cnblogs.com/virusswb/articles/1681561.html net System.Web.Caching.Cache缓存类使用详解 System. ...

  3. laravel 如何 new php 类,PHP实例:laravel通过创建自定义artisan make命令来新建类文件详解...

    <PHP实例:laravel通过创建自定义artisan make命令来新建类文件详解>要点: 本文介绍了PHP实例:laravel通过创建自定义artisan make命令来新建类文件详 ...

  4. qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...

  5. ios开发读取剪切板的内容_iOS中管理剪切板的UIPasteboard粘贴板类用法详解

    一.自带剪切板操作的原生UI控件在iOS的UI系统中,有3个控件自带剪切板操作,分别是UITextField.UITextView与UIWebView.在这些控件的文字交互处进行长按手势可以在屏幕视图 ...

  6. Java记录 -22- Java的基类Object详解

    Java的基类Object详解 Java的JDK文档要经常查阅使用,最好查看英文的文档. Oracle官方在线 Java API Specifications http://www.oracle.co ...

  7. C#中NameValueCollection类用法详解

    C#中NameValueCollection类用法详解,1.NameValueCollection类集合是基于 NameObjectCollectionBase 类. 但与 NameObjectCol ...

  8. pythonsvc_sklearn-SVC实现与类参数详解

    sklearn-SVC实现与类参数 它是基于libsvm实现的.随着样本数量的增加,拟合时间的复杂度要高于二次,这就使得当样板数量超过一万个时,很难扩展到数据集中. 在多类处理时,是按照1对1的方案进 ...

  9. (117)System Verilog类继承详解

    (117)System Verilog类继承详解 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog类继承详解 5)结语 1.2 FPGA ...

最新文章

  1. 高并发下的接口幂等性解决方案
  2. UITextView高度根据内容变化
  3. 机器学习中的集成学习模型实战完整讲解
  4. php的cookie教程,PHP4之COOKIE支持详解
  5. Linux下安装LoadRunner LoadGenerator
  6. HADOOP集群中节点之间的配置文件可否不一样?
  7. Android 使用控件自定义背景实例
  8. 16进制转double dotnet_终于把计算机进制弄明白了!
  9. LeetCode 1221. 分割平衡字符串
  10. Scrapy 1.6 中文文档校对活动 | ApacheCN
  11. paypal账户授权返回_OAuth授权|精选博客
  12. java分库校验商户流水号是否重复,asp中用数据库生成不重复的流水号
  13. HDU-1251-统计难题(字典树)
  14. 简单python日志抓取脚本
  15. CAN总线的特点及J1939协议通信原理、内容和应用
  16. 华为交换机如何导出配置信息_华为交换机配置命令 华为QuidWay交换机配置命令手册...
  17. 微信扫码下载APP解决方案
  18. Excel文本如何间隔指定字符插入分隔符
  19. Codeforces1183 E. Subsequences (easy version)(bfs)
  20. OneZero第三周第三次站立会议(2016.4.6)

热门文章

  1. 7-5 超市奖票兑换 (10 分)
  2. 《袁老师访谈录》第十四期|李世玮教授/香港科大(广州)系统枢纽署理院长【问诊未来·院长系列:开辟融合创新科技转化新航路】...
  3. 三星s9 android,总算是对市场妥协了!三星S9+售价直掉三千,现售价够值了
  4. Revit API:预制零件 Fabrication Part
  5. 大学生旅游网页制作作业5页 西柏坡介绍网页成品源代码下载 河北红色旅游景点网页设计
  6. human-UAVs teamwork: task planning and deep reinforcement learning
  7. css3 制作阳光,CSS3 制作 Loading 动画
  8. java学习之javaWeb
  9. sort -k 参数详细总结(转)
  10. #并查集#SSL 2342 信息学奥赛一本通 1386 打击犯罪