使用Phalanger整合PHP和.NET - 面向对象网 php 学习 对象 - 面向对象技术开发

面向对象技术开发

会员投稿 投稿指南 站长资讯通告:
您的位置: 首页 > OOP语言 > PHP > 正文

使用Phalanger整合PHP和.NET

来源: www.bianceng.cn 阅读:

Phalanger是一种PHP语言编译器,也是针对.NET的PHP运行时。它可以用于把PHP web项目编译成.NET字节码,并在Windows中使用IIS或 者在Linux上使用Mono和Apache作为ASP.NET应用程序来执行。然而,Phalanger不仅仅是把已经存在的PHP应用编译到.NET中。

我们可以使用Phalanger创建组合.NET和PHP的解决方案,所采用的方式用标准的PHP解释器是不可能做到的。有了Phalanger扩展,PHP 程序可以直接使用.NET类,而.NET程序(比方说用C#编写的)也可以动态地调用PHP脚本,或者使用在PHP中实现的函数和类【6】。

本文中,我么会简要地介绍Phalanger,然后查看三种使用方案。我们会讨论如何整合PHP应用程序和.NET;如何高效地在Windows上运 行PHP应用程序,以及如何使用PHP作为ASP.NET的视图引擎(view engine)。

Phalanger简介

Phalanger已经存在一段时间了。第一版Phalanger是于2003年在布拉格的查尔斯大学作为软件项目创建的。稍后就开始了2.0版本的开 发,并且于2006年在CodePlex作为开源项目发布。微软支持了这个项目一段时间,后来一位Phalanger开发者加入微软,并从事动态语言运 行时方面的工作。

Phalanger相关活动在2008年恢复,这多亏有了与Jadu的合作,它使用Phalanger为在PHP中开发的CMS构建了.NET版本。从2010年开始, Phalanger的开发主要由DEVSENSE提供资金支持,它也为Phalanger提供了商业支持。最近发布的版本Phalanger 2.1【7】,其中提升了与 标准PHP实现的兼容性,在动态操作的实现过程中利用了DLR,并提供了PHP和其他.NET语言(像C#、F#和Visual Basic)之间的互操作性。

Phalanger的组件

Phalanger包括多个部分独立的组件,可以用来开发运行在.NET上的PHP应用程序,并使用.NET或Mono来运行它们:

Phalanger编译器Phalanger会把PHP源代码编译成.NET程序集,它可以使用.NET JIT(Just-in-time编译器,它会为当前平台生成本地 代码)执行。编译后的PHP代码会使用Phalanger运行时和动态语言运行时,从而提供了PHP语言动态特性的高效率实现。

Phalanger运行时和类库Phalanger运行时提供了对数组之类PHP特性的实现。Phalanger还包含了针对I/O、正则表达式以及其他标准PHP 类库的.NET实现。

本地扩展在32位Windows平台上,Phalanger可以通过本地的桥接程序使用所有现存的PHP 4扩展。尽管这会带来一些运行时负载,但这 让我们不需要额外工作就可以运行某些PHP应用程序。

托管的扩展 通过包装.NET中提供的类似功能,PHP扩展也可以重新实现。这些扩展可以是由任何.NET语言编写,并提供很好的性能。 Phalanger中包含多个扩展,包括SPL、JSON、SimpleXML、MySQL和MS SQL的提供程序。DEVSENSE【9】还提供了附加的扩展,像Memcached 、图像和cURL等。

与Visual Studio的集成Phalanger还与Visual Studio集成(最近的更新支持Visual Studio 2010)。集成功能添加了针对PHP文件的颜 色突出显示和智能提示功能,让我们可以调试使用Phalanger运行的PHP应用程序。

Phalanger使用案例

Phalanger在很大程度上与PHP 5兼容,可以运行大量开源的PHP项目,包括WordPress和MediaWiki。我们可以使用它把这些项目集成 到.NET生态系统中,也可以开发新的项目,它会兼有PHP和.NET的优势。在本文剩下的内容中,我们会讨论以下三种使用案例:

方案1: 高效运行PHP应用程序。使用PHalanger在Windows上编译的PHP应用程序的性能,要比通过FastCGI使用标准PHP解释器运行的高 。这使得选择Phalanger在Windows环境中部署PHP很具有吸引力。

方案2: 把WordPress与ASP.NET整合。使用Phalanger编译的PHP代码能够调用所有.NET程序库。这可以用于在PHP和ASP.NET应用程序之 间共享用户数据库或者其他数据。

方案3: 从ASP.NET应用程序中调用PHP。PHP的灵活性对于编写脚本或者编写web应用程序的表现层非常有用。有了Phalanger,我们就 可以在.NET中开发应用程序,并使用PHP作为脚本语言或者视图引擎。

以下三个部分会详细讨论各种方案。我们首先会给出概览,然后查看一些技术细节,它会说明Phalanger中让你感兴趣的内容。

方案1: 高效运行PHP应用程序

Phalanger之所以能够高效地运行PHP应用程序,是因为以下两个原因。首先,它会编译PHP源代码,而不是解释它;其次,它会把应用 作为ASP.NET应用程序运行,那会在Windows下提供额外的性能优势。

使用Phalanger和.NET编译PHP

编译过程如图1所示。正如图上所显示的,Phalanger会把PHP源代码编译成.NET IL(中间语言),那是与架构独立的低级字节码。编译 后的代码会使用PHP核心库(Phalanger的一部分)和动态语言运行时(DLR)来执行标准的PHP操作。当应用程序启动时,.NET JIT(just -in-time)编译器会把这些组件转换为针对当前处理器架构优化过的本地代码。

\

图1. 使用Phalanger把PHP源代码编译成本地代码的过程

正如Phalanger评测显示【10】,使用Phalanger编译的WordPress在Windows下的性能比通过FashCGI使用标准PHP解释器的好,也比通过 WinCache使用PHP的稍好一些。然而,评测没有测试Phalanger最新的版本,它使用DLR进行了进一步优化。

Tags:
相关文章列表: