我有三个php类试图在我的.net应用程序中使用。我用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(所以我只有
类型对象)
我尝试过this方法/教程来让它工作,这涉及到将自定义接口投射到对象上,但是我得到了错误:
找不到类型或命名空间名称ScriptContext
这当然意味着它不知道脚本上下文是什么或在哪里。但是这个教程是从2007年开始的,所以我不知道它是否已经过时了,或者我应该从哪里开始上课?
我发现的那个也一样老。上面写着:
如果要使用现有的php源代码(为标准
解释器)无需修改,您必须使用传统模式,但是
当您想要开发新的php项目时,可以考虑使用pure
模式
但是,我在文档中找不到遗留模式的步骤,我更希望不要尝试“纯”模式(这样我就不必更改/编辑现有的php代码)。我确实尝试过(纯模式),但是它不会用上面的命令(将dynamicobject.php类添加到命令中)编译(phalanger compile)。
如何在php类中获取公共方法?
最佳答案
phpc /target:dll Client.php Crypt.php Exception.php
在传统(标准)模式下创建dll。此dll包含与php语义兼容所需的“怪异”名称空间。(这些命名空间将代码与不同的脚本文件分开)。.NET interoperability overview of Phalanger 3.0博客文章描述了如何使用在标准模式下编译的脚本。
命令行选项告诉编译器创建所谓的纯模式程序集。在这种模式下,编译器将所有源文件连接起来,并将它们编译为一个(就像c所做的那样),而不使用任何奇怪的名称空间。如果在php类声明上方指定
/pure+
属性,则生成的dll将看起来与从c代码编译的dll一样,并且您将能够引用它并正常使用其类。