php 命名空间 函数调用,PHP 命名空间 namespace 函数调用 类引用 详解
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 函数调用 类引用 详解相关推荐
- sstream类的详解
sstream类的详解 sstream类详细介绍 C++引入了ostringstream.istringstream.stringstream这三个类,要使用他们创建对象 ...
- .net System.Web.Caching.Cache缓存类使用详解(转载)
转自:http://www.cnblogs.com/virusswb/articles/1681561.html net System.Web.Caching.Cache缓存类使用详解 System. ...
- laravel 如何 new php 类,PHP实例:laravel通过创建自定义artisan make命令来新建类文件详解...
<PHP实例:laravel通过创建自定义artisan make命令来新建类文件详解>要点: 本文介绍了PHP实例:laravel通过创建自定义artisan make命令来新建类文件详 ...
- qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)
原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...
- ios开发读取剪切板的内容_iOS中管理剪切板的UIPasteboard粘贴板类用法详解
一.自带剪切板操作的原生UI控件在iOS的UI系统中,有3个控件自带剪切板操作,分别是UITextField.UITextView与UIWebView.在这些控件的文字交互处进行长按手势可以在屏幕视图 ...
- Java记录 -22- Java的基类Object详解
Java的基类Object详解 Java的JDK文档要经常查阅使用,最好查看英文的文档. Oracle官方在线 Java API Specifications http://www.oracle.co ...
- C#中NameValueCollection类用法详解
C#中NameValueCollection类用法详解,1.NameValueCollection类集合是基于 NameObjectCollectionBase 类. 但与 NameObjectCol ...
- pythonsvc_sklearn-SVC实现与类参数详解
sklearn-SVC实现与类参数 它是基于libsvm实现的.随着样本数量的增加,拟合时间的复杂度要高于二次,这就使得当样板数量超过一万个时,很难扩展到数据集中. 在多类处理时,是按照1对1的方案进 ...
- (117)System Verilog类继承详解
(117)System Verilog类继承详解 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog类继承详解 5)结语 1.2 FPGA ...
最新文章
- 高并发下的接口幂等性解决方案
- UITextView高度根据内容变化
- 机器学习中的集成学习模型实战完整讲解
- php的cookie教程,PHP4之COOKIE支持详解
- Linux下安装LoadRunner LoadGenerator
- HADOOP集群中节点之间的配置文件可否不一样?
- Android 使用控件自定义背景实例
- 16进制转double dotnet_终于把计算机进制弄明白了!
- LeetCode 1221. 分割平衡字符串
- Scrapy 1.6 中文文档校对活动 | ApacheCN
- paypal账户授权返回_OAuth授权|精选博客
- java分库校验商户流水号是否重复,asp中用数据库生成不重复的流水号
- HDU-1251-统计难题(字典树)
- 简单python日志抓取脚本
- CAN总线的特点及J1939协议通信原理、内容和应用
- 华为交换机如何导出配置信息_华为交换机配置命令 华为QuidWay交换机配置命令手册...
- 微信扫码下载APP解决方案
- Excel文本如何间隔指定字符插入分隔符
- Codeforces1183 E. Subsequences (easy version)(bfs)
- OneZero第三周第三次站立会议(2016.4.6)
热门文章
- 7-5 超市奖票兑换 (10 分)
- 《袁老师访谈录》第十四期|李世玮教授/香港科大(广州)系统枢纽署理院长【问诊未来·院长系列:开辟融合创新科技转化新航路】...
- 三星s9 android,总算是对市场妥协了!三星S9+售价直掉三千,现售价够值了
- Revit API:预制零件 Fabrication Part
- 大学生旅游网页制作作业5页 西柏坡介绍网页成品源代码下载 河北红色旅游景点网页设计
- human-UAVs teamwork: task planning and deep reinforcement learning
- css3 制作阳光,CSS3 制作 Loading 动画
- java学习之javaWeb
- sort -k 参数详细总结(转)
- #并查集#SSL 2342 信息学奥赛一本通 1386 打击犯罪