当前位置:首页 > 日记 > 正文

PHP5.3新功能名称空间规则解析和高级功能

PHP5.3新功能名称空间规则解析和高级功能
在PHP 5.3发布前一天,添加一个新特性是最重要的名称空间。本文介绍了PHP名称空间的一些术语、解析规则和一些高级功能,希望帮助读者真正使用项目名称空间。

这里我们介绍了PHP名称空间和命名空间关键字的用法。在本文中,我们将介绍使用命令的用法以及PHP如何解析名称空间名称。

为了比较起见,我定义了两个几乎相同的代码块,只有命名空间名称不同。

< PHP
应用程序库1
命名空间程序 lib1;
const myconst = 'app lib1 myconst;
函数myFunction(){
返回__function__;
}
类{
静态函数WhoAmI(){
返回__method__;
}
}
>
lib2.php

< PHP
应用程序库2
命名空间程序在图书馆编目;

const myconst = 'app myconst在图书馆编目;

函数myFunction(){
返回__function__;
}

类{
静态函数WhoAmI(){
返回__method__;
}
}
>
在开始之前,您必须了解几个与PHP名称空间相关的术语。
完全限定名(完全限定名)

任何PHP代码可以参考的完全限定名,这是一个标识符开头的命名空间的反斜杠,如程序 lib1 myconst,APP在图书馆编目 myFunction(),等等。

完全限定名是没有歧义的,反斜杠在开始作用的文件路径是相似的,这表示全球根的空间,如果我们实现了不同MyFunction全球空间中的(),你可以使用 MyFunction(在图书馆编目。PHP)从lib1.php或调用它。

完全限定名称对于一次性初始化函数调用或对象非常有用,但是当您在没有实际价值时产生大量的调用时,我们将在下面的讨论中看到,PHP提供了其他选项来减轻命名空间键入的困难。

限定名称(限定名称)

至少有一个为命名空间分隔标识符,如lib1 myFunction()。

不合格名称(不合格名称)

一个标识符没有命名空间的分隔符,如myFunction()。

在同一名称空间中工作

仔细考虑下面的代码:

myapp1.php
Even if we include lib1.php and lib2.php at the same time, MYCONST, MyFunction and MyClass identifiers can only be referenced in lib1.php, which is because myapp1.php's code is in the same AppLib1 namespace.

实施结果:

lib1程序 myconst
应用程序 lib1 MyFunction
应用程序 lib1 MyClass::whoami

命名空间导入

可以使用使用操作符导入名称空间,例如:

myapp2.php
< PHP

使用应用程序在图书馆编目;

require_once('lib1。php);
require_once('lib2。php);

头('content-type:文本/平原);
回声在图书馆编目 myconst。;
回声在图书馆编目 myFunction()。;
回声在图书馆编目 MyClass()::WhoAmI。;
>

你可以定义任意数量的使用报表,或使用逗号分成单独的命名空间,在这个例子中我们导入程序在图书馆编目的命名空间,但我们仍然不能直接引用myconst,MyFunction和MyClass,因为代码仍然在我们的全球空间,但如果我们将在图书馆编目前缀,他们成为一个合格的名字,PHP搜索将导入的命名空间,直到比赛。

实施结果:

在图书馆编目程序 myconst
在图书馆编目程序 MyFunction
在图书馆编目程序 MyClass::whoami

命名空间别名

命名空间别名可能是最有用的概念,而别名允许我们使用较短的名称来引用一个长名称空间。

myapp3.php

< PHP
使用应用程序 lib1 L;
使用应用程序 MyClass作为对象在图书馆编目;

头('content-type:文本/平原);
require_once('lib1。php);
require_once('lib2。php);

回声我 myconst。;
回声我 myFunction()。;
回声我 MyClass()::WhoAmI。;
回波目标::WhoAmI()。;
>

第一次使用语句定义了应用程序 lib1我任何我合格的名字会在编译时转换成应用程序 lib1,所以我们可以参考我 myconst我 MyFunction不是完全限定名称。

二使用语句定义obj为MyClass类APP 在图书馆编目命名空间别名。这种方法只适用于类,不能用于常量和函数。现在我们可以使用新的Obj()或运行静态方法和上面一样。

实施结果:

lib1程序 myconst
应用程序 lib1 MyFunction
应用程序 lib1 MyClass::whoami
在图书馆编目程序 MyClass::whoami

PHP命名解析规则

使用以下名称空间规则解析PHP标识符名称。有关详细信息,请参阅PHP用户手册:

1。在编译时调用完全限定函数、类或常量。

2。不合格名称和限定名称是根据导入规则进行翻译的,例如,如果导入了C C到C,调用C(e)将被翻译成一个;

3、在PHP命名空间中,所有的限定名称都没有按照导入规则进行转换。例如,如果您在名称空间A中调用C。

4、不受限制的类名根据当前导入规则进行转换,导入的短名称由全名替换。例如,如果C类被导入到名称空间中的x中,则新的x()将被转换为新的。

5、在名称空间中,在运行时解析非有限函数调用。例如,如果myFunction()是在命名空间 B调用PHP函数,首先寻找 MyFunction(B)。如果没有找到,那么它将寻找 myFunction()在全球空间。

6、调用不受限制或受限的类名在运行时解析。例如,如果我们在名称空间A中调用新的C(),PHP将寻找类C。

命名空间高级特性

让我们来看一下PHP名称空间的一些高级特性。

__namespace__常数

__namespace__是PHP字符串总是返回当前命名空间的名称,这是在全球空间空字符串。

这个值在调试中非常有用,它也可以动态生成一个完全限定类名,例如:
(whoami); / /输出::whoami >程序 lib1 MyClass:

namespace关键字

namespace关键字可以用来明确提到在当前命名空间或subnamespace项目,这相当于在类的自我空间:
(whoami); / /输出::whoami >程序 lib1 MyClass:

自动加载命名空间类

PHP 5中最省时省力的特性是自动加载的,在全局(非命名空间)PHP代码中,可以编写标准的自动加载功能:

在PHP 5.3中,您可以创建命名空间类的实例。在这种情况下,命名空间和类名传递给__autoload功能。例如,class_name美元价值可能是程序 lib1 myclass.you可以把所有的PHP类文件相同的文件夹下,从字符串中提取的命名空间,但会导致文件名冲突。

此外,您的类文件层次结构将根据命名空间的结构进行重组。例如,MyClass.php的文件可以创建在/类/应用/ lib1文件夹。

/ / /类APP lib1 / myclass.php

根文件夹中的文件使用以下代码:

myapp.php
(whoami); / /自动加载功能__autoload(合班)将命名空间完整的文件 / /路径$ { class= 'classes (str_replace。美元类。、/、.php);require_once(合班);} >

解释:

1个别名。APP lib1 MyClass类型为MC;

2。新的MC()转化为新的应用程序 lib1 MyClass()在编译时;

3。字符串的应用程序 lib1 MyClass传递到__autoload功能,在所有命名空间使用文件路径倾斜替换反斜杠,然后修改字符串,和类程序 lib1 myclass.php文件会自动加载。

总结

这里介绍了PHP名称空间的使用。我希望您对PHP名称空间有了新的了解,希望您能在新项目中真正使用名称空间。

相关文章

游戏不能全屏,怎么做游戏画面两边的

游戏不能全屏,怎么做游戏画面两边的

全屏,详细说明,怎么做,游戏,画面,很多网民都在玩游戏,比如过线和Warcraft。他们发现游戏画面集中在屏幕的中间,屏幕两边都有黑色的一面,所以游戏不能全屏运行,这是因为游戏的分辨率和宽屏显示器的分辨率不匹配,现在分享一些不同显卡的解决方案。…

如何Word2003插入当前日期和时间

如何Word2003插入当前日期和时间

当前日期,时间,电脑软件,如何Word2003插入当前日期和时间的方法 1,单击位置插入日期或时间。 2、点击插入菜单中的日期和时间;。 三.如果您想在插入的日期或时间应用其他语言格式,请单击语言框中的语言。 语言;该框列出了启用编辑功能的语…

如何设置右下角时间Win8/8.1的时间

如何设置右下角时间Win8/8.1的时间

系统,时间,右下角,课程设置,如何设置,点评:作为微软WinXP系统将不支持即时服务,很多朋友都已经开始使用Win8和Win8.1操作系统,而是因为他们不熟悉,有很多地方不会用。这一次萧边会带你去看Win8系统时间设置。 现在很多朋友都开始使用Win8和Win8…

WindowsServer2008R2下安装SQLServ

WindowsServer2008R2下安装SQLServ

安装,注意事项,电脑软件,注释:Windows Server 2008 R2必须是SP1版本。如果不是SP1,最简单的解决方案是在控制面板中打开自动升级,并将自动更新升级到SP1版本。 SQL Server 2012版的RC0已经出来了,并决定安装尝尝鲜。SQL Server 2012操作系统的…

在Linuxchkconfig命令的详细解释

在Linuxchkconfig命令的详细解释

解释,命令,详细,电脑软件,Linuxchkconfig,点评:chkconfig命令主要用来更新(启动或停止)和查询系统运行服务水平信息。记得chkconfig不立即自动禁止或激活一个服务,它只是改变了符号连接 使用语法: { } { chkconfig --添加--德尔} { } {或清单ch…

Word2003快速取消所有项目编号格式

Word2003快速取消所有项目编号格式

方法,取消,项目编号,快速,格式,做任何事情总是有问题。制作word文档也是一样的。尤其是在编写长文本时,不可能一次编辑所有内容,如您所知,在编写文档时不可避免地使用项目编号函数,并且自动生成项目编号函数,如1, 2, 3、4, 5等。 那么我们如何快…

航空Peek预览桌面win2008是灰色的,

航空Peek预览桌面win2008是灰色的,

选择,桌面,灰色,航空,电脑软件,问题: Windows Server 2008 R2系统安装在电脑上,无法打开像任务栏缩略图win7任务栏和开始菜单,在;;航空皮克属性;预览桌面灰色的选项是不可选的,在选择的表现;视觉效果;选择;调整为最佳外观,并确定了选择;保存任务栏缩略…

解决无法访问自定义VBscript运行时行为

解决无法访问自定义VBscript运行时行为

运行,自定义,无法访问,时行,电脑软件,点评:VBscript引擎可以快速注册通过以下步骤 VBscript引擎可以快速注册通过以下步骤: 1。作为管理员运行命令提示符 1.1开始菜单>全部>程序附件 1.2右键单击命令提示符并选择作为管理员运行 2。如果您使用的是32位…

快速更新刺客信条3游戏版本法(技术)

快速更新刺客信条3游戏版本法(技术)

信条,刺客,版本,快速,技术,许多网民反映了更新刺客信条的3游戏版本的复杂性,现在分享游戏版本的快速更新。 首先,对UBI育碧游戏Launcher育碧游戏的安装工具,它可以实现UBI的游戏更新自动版本可以下载官方网,直接解压到育碧文件夹。 此外,如果你…

基于PHP的Socket应用实例分析(fsock

基于PHP的Socket应用实例分析(fsock

应用实例,电脑软件,PHP,Socket,fsockopen,的fsockopen函数可以使用,首先打开allow_url_open =在php.ini; fsockopen是socket的客户端代码的封装,封装socket_create,socket_connect。 服务器端代码:server.php 复制代码代码如下所示: error_repor…

vsftpd+tcp_wrappers控制主机和用

vsftpd+tcp_wrappers控制主机和用

主机,用户,控制,电脑软件,vsftpd,点评:在RHEL4 vsftpd支持tcp_wrappers在编译的时候,所以你可以使用tcp_wrappers实现主机访问控制。 在实验之前,首先要说明TCP包装器的执行顺序: Hosts.allow首先被执行。如果在hosts.allow列表,它允许访问本机…

基于oracle的面向对象技术简介

基于oracle的面向对象技术简介

面向对象技术,简介,电脑软件,oracle,正在学习Oracle教程:介绍基于Oracle的开发人员网络Oracle面向对象技术的介绍。 首先,概述 物体在超过Oracle8i版本的新功能。对象实际上是一组数据和操作,对象的抽象是类,在面向对象技术中,对象涉及以下重要…