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将先转译然后再编译这段代码。转换出的 字节码被将被作为临时程序集被存储在内存中(我们也称它为瞬时程序集)
。注意整个转译以及编译的过程很快,因为瞬时程序集也会被缓存起来加速的运行相同PHP代码。
如你所见,你也能在参数file name以及 postion中提供文件名以及文件所在位置;所以当你调试代码然后单步调试进入表达式时,它将会刚好跳到position参数指定的位置。
注意被缓存的瞬时程序集是否被更新将依赖于ScriptContext前面执行的PHP代码(比如定义好的类以及方法),只有前后两次生成的PHP代码一致时,瞬时程序集才能被缓存下来。这就是为什么Eval方法中的参数code,file name以及position与前面的的匹配时才能缓存后被重用。
那么我们要记住,当随后要运行更多的PHP代码片段时你应该首先考虑这个问题。
最后如果你打算在web应用程序中使用Phalanger时,你应该首先就初始化PHP.Core.RequestContext, 然后在php脚本结束时销毁它。
1using (var request_context = RequestContext.Initialize(
2 ApplicationContextfault,
3 HttpContext.Current))
4{ /* all the stuff above */ }
总结:
总共就是这些。 因为后面执行的的PHP代码中也包含了已经定义好的PHP方法,变量以及类,所以你也能在 代码中使用它们。
应用程序功能的语言。你也能用这个技术去创建一个使用c#建立域名模块和PHP搭建用户接口的web应用程序。