Maison php教程 php手册 把PHP作为C#程序的脚本语言(翻译)

把PHP作为C#程序的脚本语言(翻译)

Jun 13, 2016 am 10:47 AM
http php Paquet de 程序 翻译 脚本 语言

原文: http://dotnet.dzone.com/articles/php-scripting-language-c
 
当我们打算创建一个.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只是仅仅与一个线程紧密关联
 
1
var context = PHP.Core.ScriptContext.CurrentContext;
然后我们将设置ScriptContext的输出方式,这样PHP脚本才能转换出我们所需要的流。这里我们将设置两个输出方式- 字节流以及文本流。注意在最后你必须销毁这些流,以至于所有的数据将会被正确的刷新
 
1
context.OutputStream = output;
2
using (context.Output = new System.IO.StreamWriter(output)) {
我们也能在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的博客

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

7 fonctions PHP que je regrette de ne pas connaître auparavant 7 fonctions PHP que je regrette de ne pas connaître auparavant Nov 13, 2024 am 09:42 AM

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Programme PHP pour compter les voyelles dans une chaîne Programme PHP pour compter les voyelles dans une chaîne Feb 07, 2025 pm 12:12 PM

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Expliquez la liaison statique tardive en PHP (statique: :). Expliquez la liaison statique tardive en PHP (statique: :). Apr 03, 2025 am 12:04 AM

Liaison statique (statique: :) ​​implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Apr 03, 2025 am 12:03 AM

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.

See all articles