把PHP作为C#程序的脚本语言(翻译)(2)
来源:未知 责任编辑:责任编辑 发表时间:2015-01-01 13:14 点击:次
我们也能在ScriptContext中设置全局变量,这样我们也能很方便的传输一些参数到运行的PHP代码中。
1
Operators.SetVariable(context, null, "X", "Hello World!");
最终我们将使用的Eval方法来运行PHP代码. 而这个方法实际上被Phalanger内部用来处理PHP的eval() 表达式.所以这就是为什么这个方法有如此多参数的原因。
01
// evaluate our code:
02
return DynamicCode.Eval(
03
code,
04
false,/*phalanger internal stuff*/
05
context,
06
null,/*local variables*/
07
null,/*reference to "$this"*/
08
null,/*current class context*/
09
"Default.aspx.cs",/*file name, used for debug and cache key*/
10
1,1,/*position in the file used for debug and cache key*/
11
-1,/*something internal*/
12
null/*current namespace, used in CLR mode*/
13
);
如果运行代码表现得和全局php代码一样时,大部分参数看上去就没什么特别之处了。最重要的参数就是code.该参数是一个包含你的php代码的字符串。Phalanger将先转译然后再编译这段代码。转换出的.net字节码被将被作为临时程序集被存储在内存中(我们也称它为瞬时程序集)
。注意整个转译以及编译的过程很快,因为瞬时程序集也会被缓存起来加速的运行相同PHP代码。
如你所见,你也能在参数file name以及postion中提供文件名以及文件所在位置;所以当你调试代码然后单步调试进入表达式时,它将会刚好跳到position参数指定的位置。
注意被缓存的瞬时程序集是否被更新将依赖于ScriptContext前面执行的PHP代码(比如定义好的类以及方法),只有前后两次生成的PHP代码一致时,瞬时程序集才能被缓存下来。这就是为什么Eval方法中的参数code,file name以及position与前面的的匹配时才能缓存后被重用。
那么我们要记住,当随后要运行更多的PHP代码片段时你应该首先考虑这个问题。
最后如果你打算在web应用程序中使用Phalanger时,你应该首先就初始化PHP.Core.RequestContext, 然后在php脚本结束时销毁它。
1
using (var request_context = RequestContext.Initialize(
2
ApplicationContext.Default,
3
HttpContext.Current))
4
{ /* all the stuff above */ }
总结:
总共就是这些。 因为后面执行的的PHP代码中也包含了已经定义好的PHP方法,变量以及类,所以你也能在.net代码中使用它们。
.net应用程序功能的语言。你也能用这个技术去创建一个使用c#建立域名模块和PHP搭建用户接口的web应用程序。
如果你对这个感兴趣,希望得到更多的信息,你可以查阅Standard_mode_interoperability的最新文章(http://wiki.phpcompiler.net/Code_Samples/Standard_mode_interoperability)
作者 junwong的博客
相关新闻>>
- 发表评论
-
- 最新评论 更多>>