仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 787|回复: 19
打印 上一主题 下一主题

[学习教程] PHP网页编程之把PHP作为C#法式的剧本言语

[复制链接]
第二个灵魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:32:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
模仿的不光是模仿,模仿的同时在加改进,就成了自己的作品了。      当咱们盘算创立一个.net法式时(包含桌面法式或Web使用法式),假如能利用其他言语来扩大这个.net法式的功效的话那一定会相当有适用价值。
    好比某些用户可以写一个复杂剧本来设置这个法式的一些设定,或在法式中修正数据是若何耐久化保留的,或为这个.net法式写一个复杂的插件。在这篇文章,咱们来看看若何让php作为.net法式的剧本言语
    明显如许做有良多的优点:
    1,良多法式员城市写一些根基的PHP代码,乃至一个低级法式员都能为你的使用写一个复杂的PHP剧本代码
    2, PHP长短常轻易利用的,收集上已有了一大堆现成的php代码片断可以拿来复制后直接利用
    3,归功于Phalanger库( http://phalanger.codeplex.com/), PHP代码可以很轻易地获得任何.net库和挪用几近一切.net法式供应的办事
    下面描写的场景仅仅只是利用Phalanger from C#(或其他编程言语)在运转时生成PHP代码的一小局部案例,打个例如,你能想象一下一个web收集架构利用C#来写域名模块然后利用PHP去搭建用户接口会是甚么模样. 所以本文将展现若何在C#的法式中运转PHP代码,与怎样利用全局变量作为参数传递到PHP代码,和若何读取尺度.net流。
    Phalanger 是一个将PHP剧本编译成.net字节码的编译器,它自己就被设计用来答应无缝地让.net与其他言语停止双向的互操作性。
    这就意味着你能在php代码中挪用.net办法和利用.net的类(http://wiki.phpcompiler.net/.NET_interoperability),同时你也能在C#或F#中挪用php的办法和利用php的类.( http://wiki.phpcompiler.net/Code_Samples/Standard_mode_interoperability)
    同时本文展现了别的一种利用Phalanger的体例:经由过程.net法式来运转php代码.特别当被运转的代码是静态获得的或没法被预编译为法式集时(例如今世码是后来被用户所写的这类情形).当运转的的php代码没有任何改动时,普通你应当利用预编译的剧本库( http://wiki.phpcompiler.net/Code_Samples/Standard_mode_interoperability),如许可以失掉更高的效力由于在运转时它们不会介入编译。
    设置装备摆设
    在ASP.NET 4.0 C#的网站法式中我已测试过这个手艺了,固然,在.net掌握台法式或winforms如许的桌面使用法式中也是可行的。但要记住你的.net法式必需是利用.net 4.0(full profile)作为方针.net框架,和必需援用最少一个Phalanger的法式集:“PhpNetCore, Version=2.1.0.0, Culture=neutral, PublicKeyToken=0A8E8C4C76728C71". Phalanger必需在你的使用法式中准确设置装备摆设。固然它一样可以被手动设置装备摆设(http://www.php-compiler.net/blog/2011/installation-free-phalanger-web),但最复杂的体例就是利用装置器了。
    源码
    难以想象的是运转PHP代码的中心就是PHP.Core.DynamicCode.Eval这个办法, 它在PhpNetCore.dll法式集中,独一有些费事的能够就是办法所需的大批参数了。起首咱们需求一个可用的PHP.Core.ScriptContext实例, 这就是Phalanger的运转php代码的履行实例。你能从以后线程上获得一个如许的实例.出格注重PHP不是多线程的,所以ScriptContext只是仅仅与一个线程严密联系关系
    1var context = PHP.Core.ScriptContext.CurrentContext;
    然后咱们将设置ScriptContext的输入体例,如许PHP剧本才干转换出咱们所需求的流。这里咱们将设置两个输入体例 - 字撙节和文本流。注重在最初你必需烧毁这些流,以致于一切的数据将会被准确的刷新
    1context.OutputStream = output;
    2using (context.Output = new System.IO.StreamWriter(output)) {
    咱们也能在ScriptContext中设置全局变量,如许咱们也能很便利的传输一些参数到运转的PHP代码中。
    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使用法式。
PHP于1994年由Rasmus Lerdorf创建,刚刚开始是Rasmus Lerdorf为了要维护个人网页而制作的一个简单的用Perl语言编写的程序。
冷月葬花魂 该用户已被删除
沙发
发表于 2015-2-3 23:45:50 | 只看该作者
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
灵魂腐蚀 该用户已被删除
板凳
发表于 2015-2-4 06:25:40 | 只看该作者
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
再见西城 该用户已被删除
地板
发表于 2015-2-5 05:05:35 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
莫相离 该用户已被删除
5#
发表于 2015-2-11 20:49:59 | 只看该作者
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
谁可相欹 该用户已被删除
6#
发表于 2015-2-21 02:56:26 | 只看该作者
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
若天明 该用户已被删除
7#
发表于 2015-3-6 19:29:07 | 只看该作者
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
8#
发表于 2015-3-13 06:27:47 | 只看该作者
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
简单生活 该用户已被删除
9#
发表于 2015-3-14 11:52:23 | 只看该作者
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
精灵巫婆 该用户已被删除
10#
发表于 2015-3-21 05:20:23 | 只看该作者
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
若相依 该用户已被删除
11#
发表于 2015-4-1 09:45:38 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
活着的死人 该用户已被删除
12#
发表于 2015-4-6 22:11:12 | 只看该作者
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
分手快乐 该用户已被删除
13#
发表于 2015-4-7 15:38:38 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
金色的骷髅 该用户已被删除
14#
发表于 2015-4-15 01:58:36 | 只看该作者
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
第二个灵魂 该用户已被删除
15#
 楼主| 发表于 2015-4-16 01:52:51 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
只想知道 该用户已被删除
16#
发表于 2015-4-25 13:32:26 | 只看该作者
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
海妖 该用户已被删除
17#
发表于 2015-4-29 01:37:02 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
再现理想 该用户已被删除
18#
发表于 2015-5-6 09:11:52 | 只看该作者
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
透明 该用户已被删除
19#
发表于 2015-5-7 11:11:46 | 只看该作者
当然这种网站的会员费就几十块钱。
柔情似水 该用户已被删除
20#
发表于 2015-6-4 19:06:42 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-20 19:32

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表