在 PHP 脚本中使用 App_Code 中的 C#





5.00/5 (3投票s)
C# 和 PHP 之间的互操作性。
Phalanger 3.0 带来了几个很酷和有用的特性,使得 C# 和 PHP 之间的互操作性更容易。在这篇文章中,我将展示其中之一。
用例
想象几种用例。
- 您有一个由许多 .php 脚本组成的 PHP 网站,并且您想扩展其功能或完全用 C# 重写其后端。 像您习惯的那样,您希望将 C# 代码写入特殊的 App_Code 文件夹中。
- 您已经有了 ASP.NET 网站。 并且您将添加一些 PHP 脚本,因为这对您的程序员来说更容易,或者您已经在 PHP 中拥有了表示层。 您仍然必须从这些 PHP 脚本中使用现有的 C# 对象。
- 您有一个 PHP 网站,并且您将慢慢迁移到 C#。 您必须随后将 PHP 代码的关键部分重写为 C#,而您的网站的其他部分仍然使用 PHP。 这种混合网站在整个过程中必须正常工作。
所有这些情况都有一个共同的架构。 整个网站都有 .php 脚本,并且 App_Code 文件夹中有 .cs 脚本。 您希望在 PHP 代码中使用所有 C# 方法和类,反之亦然。
安装
在 Phalanger 3.0 发布之前,您需要在单独的类库项目中编写 C# 代码,将其编译成程序集,并在 web.config 文件中添加引用。 这种方法正在使用,但是它使开发速度比本应的速度慢一点。
现在,这个过程由 ASP.NET 和 Phalanger 一起处理。 您不必配置任何内容,一切都按预期工作。
用 .NET 语言编写并放置在 App_Code 文件夹中的任何公共类,在使用标准 PHP 语法时,在您的 PHP 代码中都是无缝可见的。
演示
我在这里创建了一个简单的演示:App_Code 互操作性。 演示由一个 PHP 页面组成,该页面包含表示层,使用 C# 编写的 Class1。 注意,没有配置链接这两个世界,一切都像在任何其他 ASP.NET 站点中一样工作。
该演示利用了 Phalanger 和 ASP.NET 的几个特性。
- Web 应用程序会记住最后请求的文本和请求的数量。 由于驻留在 ASP.NET AppPool 实例中的(真实的)静态变量,这非常容易。 这种技术可用于实现非常有效的内存中缓存。
- PHP 脚本会自动编译成 .NET 程序集,如果它们更改,则会自动重新编译。
- 应用程序的后端很容易用 C# 编写,或者部分用 C# 编写。 通过这种方式,Web 应用程序的关键部分可以用 C# 有效地实现,同时您保留 PHP 中的现有代码。
- 最后,App_Code 文件夹中的 C# 代码在 PHP 代码中自动可见,包括命名空间、常量、属性和方法。
<b>Camels created: </b><?= Class1::$CamelsProcessed ?><br/><b>Previous camel: </b>
<?= Class1::$LastCamel ?><br/><?php$x = new Class1;
$growncamel = $x->MakeCamelFromGet(); // $x->Camel( $_GET['babycamel'] );if ($growncamel):
?><h2><?= $growncamel ?></h2>
<?endif;?>
上面的代码显示了简单的用法,在 PHP 代码中无缝使用 C# 类。 它真的没有使用任何 .NET 类,但是 Class1
是用 C# 编写的。 它从 App_Code 文件夹自动加载。
它是如何工作的
App_Code 功能利用了 ASP.NET,它会自动预编译特殊 /App_Code 文件夹中的所有代码。 结果程序集放置在 HttpRuntime.CodegenDir (Temporary ASP.NET Files)。 程序集名称可以在 XML 文件 "App_Code.compiled" 中找到,在 XML 元素 preserve
中,属性 assembly
(如果配置不同)。
Phalanger 本身以前就能够引用 .NET 程序集。 但是现在,它会自动加载 App_Code 程序集,而无需其他配置和编译。
App_Code 程序集在编译时加载。 这导致了几个编译时优化,因此使用此类非常快。 此外,当更改 App_Code 内容时,Phalanger 会自动重新编译 PHP 脚本。
结论
在这篇文章中,我试图演示如何轻松地用 C# 编写 PHP Web 的一部分。 通过这种方式,您可以将现有的 C# 代码库与 PHP 表示层集成,或者只是随后将 PHP 代码的关键部分转换为 C# 类。 您可以尝试我准备的 ASP.NET 网站 (App_Code 互操作性)。 它只需要安装 Phalanger 3.0 和 ASP.NET Web 服务器(最简单的方法是打开 Visual Studio 2010,点击 File-Open-Web Site,然后浏览到包含演示的文件夹。 按 F5 并运行)。