PHP能参与桌面项目吗?适合吗?——C#客户端 嵌入 PHP 一例

来源:互联网 发布:软件sp版是什么意思 编辑:程序博客网 时间:2024/05/20 08:26

继Python和Ruby能集成C#后,现在PHP也可以嵌入到C#中了。下载(含应用程序源代码和PHP5的dll):Part1 Part2

先看程序界面

 

再看PHP代码:

  1. <?php
  2. function OnDNButton1Click() {
  3.     $textBox1=dsRE_GetSharedObject(NULL,"WinApp1.Form2.textBox1");
  4.     $textBox1->Text="Clicking button1";
  5. }
  6. function OnDNButton2Click() {
  7.     $textBox1=dsRE_GetSharedObject(NULL,"WinApp1.Form2.textBox1");
  8.     $textBox1->Text="Clicking button2";
  9. }
  10. ?>
  11. <?php
  12. $ds=new dsRE();
  13. $window=$ds->GetSharedObject("WinApp1.Form2");            //-->>获得共享对象,C#对象进入PHP之关键
  14. $window->Show();
  15. $Button1=$ds->GetSharedObject("WinApp1.Form2.button1");
  16. $ds->RegistMethod("OnDNButton1Click",$Button1,"Click");
  17. $Button2=$ds->GetSharedObject("WinApp1.Form2.button2");
  18. $ds->RegistMethod("OnDNButton2Click",$Button2,"Click");
  19. ?>

核心问题:C#对象如何跨语言进入PHP的呢?

对象的跨语言进入是脚本语言嵌入到编译语言的核心问题,无论Python嵌入到C#或者C/C++,还是JavaScript嵌入到浏览器(window和document等对象可以在js中使用就是这个核心问题的起点),还是C++集成PHP或者Python,都离不开这样的一个核心问题:编译语言的对象如何进入脚本,而脚本的类或者对象又如何被编译语言使用。

 

 1 C#对象设为共享对象

  1. SharedAllFormControl("WinApp1",new Form2());
 2 PHP获得该共享对象
  1. $window=$ds->GetSharedObject("WinApp1.Form2");

然后操作它 Show ,对于 button 来说就用 RegistMethod 委托 Click 事件。


对照 JavaScript (MS Script)来说,request=newActiveXObject("Microsoft.XMLHTTP");这样的语句可以使COM类进入到脚本,还不是把现有对象进入到脚本。对于IronPython来说,python_engine.Globals["o"]=my_class_instance;用全局字典的途径可以使C#对象进入Python中。

至于C++对象进入脚本语言,各自的开发文档都有说明,而且必然支持,这里不再赘述。


后篇:

PHP脚本可以从文件装入,也可以内置在C#程序中,也可以从服务器传来。如果PHP脚本是由服务器传过来的,则可以使客户端更“软”,客户端随时按需由服务器改变,C/S拥有了B/S的最大优点;如果PHP脚本是从文件装入,客户端可以由现场维护工程师就地增加或者修改功能,即时得到客户反馈,提高满足客户要求的效率。

 

在 C# 嵌入 Python 不大流行的情况下,嵌入 PHP 也许是个突破口,毕竟 PHP 比 Python 使用更为广泛。