把PHP作为C#程序的脚本语言
1Operators.SetVariable(context, null, "X", "Hello World!");
最终我们将使用的Eval方法来运行PHP代码. 而这个方法实际上被Phalanger内部用来处理PHP的 eval() 表达式.所以这就是为什么这个方法有如此多参数的原因。 01// evaluate our code: 02return 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脚本结束时销毁它。 1using (var request_context = RequestContext.Initialize( 2 ApplicationContext.Default, 3 HttpContext.Current)) 4{ /* all the stuff above */ } 总结: 总共就是这些。 因为后面执行的的PHP代码中也包含了已经定义好的PHP方法,变量以及类,所以你也能在.net代码中使用它们。 .net应用程序功能的语言。你也能用这个技术去创建一个使用c#建立域名模块和PHP搭建用户接口的web应用程序。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |