3

我尝试在我的 .net 应用程序中使用三个 php 类。我使用 Phalanger 来获取这三个类并使用以下命令创建一个 .dll 文件:

phpc /target:dll Client.php Crypt.php Exception.php

其中当然输出了 Client.dll 以及 Client.pdb 文件。

从那里我去了 VS2012 并创建了一个新的 asp.net 应用程序并添加了 Client.dll 作为参考。但是,我没有看到任何类的公共方法,并且对象浏览器窗口显示:

Client>Client>Base Types>Object(所以我只有 Object 类型的方法)

我已经尝试过这种方法/教程来使其工作,这涉及将自定义接口投射到您的对象上,但是我收到错误:

找不到类型或命名空间名称 ScriptContext

这当然意味着它不知道 ScriptContext 是什么或在哪里。但是本教程是从 2007 年开始的,所以我不知道它是否已经过时或者我应该从哪里获得该课程?

我发现的另一个教程同样古老。它说:

如果你想使用现有的 PHP 源代码(为标准解释器开发)而不需要修改,你必须使用 legacy 模式,但是当你想开发新的 PHP 项目时,你可以考虑使用 pure 模式

但是我在文档中找不到遗留模式的步骤,并且更喜欢尝试“纯”模式(这样我就不必更改/编辑我现有的 php 代码)。我确实尝试过(纯模式)但是它不会用上面的命令编译(phalanger compile)(将 DynamicObject.php 类添加到命令中)。

如何在 php 类中访问我的公共方法?

4

1 回答 1

1
phpc /target:dll Client.php Crypt.php Exception.php

以传统(标准)模式创建 DLL。此 DLL 包含与 PHP 语义兼容所需的“奇怪”名称空间。(这些命名空间将代码与不同的脚本文件分开)。Phalanger 3.0 博客文章的 .NET 互操作性概述描述了如何使用在标准模式下编译的脚本。

命令行选项/pure+告诉编译器创建所谓的纯模式程序集。在这种模式下,编译器连接所有源文件并将它们编译为一个(就像 C# 所做的那样),没有任何奇怪的命名空间。如果您[\Export]在 PHP 类声明上方指定属性,生成的 DLL 将看起来像是从 C# 代码编译的,您将能够引用它并正常使用它的类。

于 2012-10-12T15:39:34.333 回答