ET 命名空间中导入了功能(我们可以使用 web.config 文件来引用程序库)。 在将来的版本中,Phalanger 会使用 PHP 5.3 支持的标准命名空间,但是这项改变还没有完全实现。剩余部分的代码看起来和标准的 PHP 代码一样。 然而,Membership 类实际上是标准的 .NET 类。 Phalanger 会把 PHP 类和 .NET 类同等对待,所以我们可以使用标准的语法来调用 .NET 方法。 函数 ValidateUser 和 GetUser 都是静态函数,所以使用::语法来调用。 GetUser 的结果是一个 .NET 的 MembershipUser 对象, 其中带有各种属性,包括关于用户的基本信息。 我们仍然可以使用标准的标记法来访问对象的字段(它们被实现为 .NET 的属性)。正如你所看到的,我们可以很自然地在 PHP 中使用 .NET 功能。 由于代码会被编译成 .NET 程序,所以在调用 .NET 库时不会有任何负载。 下一部分展示的是反方向的整合 —— 从 .NET 应用程序中调用 PHP。方案3: 从 ASP.NET 应用程序中调用 PHPPHP 的主要优势就在于灵活性和简单性,这使得它成为编写脚本和实现渲染 HTML 很棒的语言。 然而,有些人发现,想要实现大型应用程序,那么用静态类型语言 —— 像 Java 或C# —— 会更容易一些。 使用 Phalanger,我们可以同时获得两方面的优势。这个部分所讨论的方案演示了一种组合 ASP.NET 和 PHP 的方式。 它基于先进的 ASP.NET MVC(模型、视图、控制器)框架,将表现层、负责交互的层和应用程序的业务逻辑分离开来。 我们可以使用不同的语言来开发单独的组件: C#模型和控制器 模型和控制器会在 C# 中编写。 应用程序的这个部分会实现业务逻辑,通常这在静态类型语言中编写更容易一些,特别是在业务逻辑非常复杂的情况下。 此外,我们还可以使用像 LINQ 之类的技术来存储数据,使用任务并行库(Task Parallel Library)使用多线程来实现高性能计算。 PHP 视图 应用程序的表现层会用 PHP 编写。 在这里,PHP 的简单性和灵活性会提供最大的好处。 此外,这意味着应用程序的这个部分可以由开发经验比较少的开发者来编写,因为大多数 web 开发者的 web 设计师都对 PHP 有些了解。还有一些情况,从 C# 中调用 PHP 会很有用。 例如,你可以在大型的 C# 项目中使用 PHP 作为脚本语言。 这也非常有用,因为 PHP 是一种广为所知的语言。 另一种情况是,当在 C# 中使用 PHP 程序库的时候 —— 正因为有了 Phalanger 的 duck typing 机制,这才得到了很大程度的简化,该机制甚至可以为调用文档齐备的 PHP 代码生成静态类型的 C# 接口。在本文剩余的内容中,我们会着重讨论使用 PHP 实现 ASP.NET 应用程序表现层的方案。 你可以在文章末尾找到其他方案(像编写脚本)的参考信息。在 C# 和 PHP 中创建模型-视图-控制器应用程序首先让我们看下使用 C# 和 PHP 组合创建出来的简单应用程序。 应用程序的模型和控制器都是使用 C# 编写的,如代码 2 所示。在这个例子中,模型只是一个简单的 C# 类,它表示的是产品信息。 在现实情况下,这个类可能会负责从数据库载入数据,并且可能使用 LINQ 来实现。代码2: 示例 web 应用程序(C#)的模型和控制器public class Product { public string ProductName { get; set } public double Price { get; set } } public class HomeController : Controller { public ActionResult Index () { ViewData.Model = new Product { ProductName = "John Doe", Price