Wednesday, September 12, 2007

Using PHP library from C#

If you have a bunch of working PHP code forming a library you use in your PHP applications and would like to use it in C# applications as well, you'll find this tutorial useful.


First, paste the following code into file called Library.php in some directory.


<? include "ClassC.php" ;   function f ( ) { echo "Hello! \n " ; } echo "Library initialized: Now, you can use " . "classes and functions declared here. \n " ; ?>

Than paste the following class in file named ClassC.php in the same directory:


<? class C { public $array = array ( 1 , 2 , 3 ) ; function __construct ( $data ) { $this-> data = $data; } } ?>

To build the class library using Phalanger use following command:


phpc /target:dll /out:ClassLibrary.dll Library.php ClassC.php

This command builds the two scripts into an assembly called ClassLibrary . Let's create a C# and VB .NET console applications now that reference this library and call a function declared in Library.php and creates an instance of a class declared in ClassC.php .


In C#, the program using the library may look like following:


using PHP. Core ; using System;   namespace ConsoleApplication2 { class Program { static void Main ( string [ ] args ) { ScriptContext context = ScriptContext. CurrentContext ;   // redirect PHP output to the console: context. Output = Console. Out ;   // get a representative type of the ClassLibrary library: Type library_representative = typeof ( ClassLibrary ) ;   // include the Library.php script, which initializes the // whole library (it is also possible to include more // scripts if necessary by repeating this call with various // relative script paths): context. IncludeScript ( "Library.php" , library_representative ) ;   // call function f(): context. Call ( "f" ) ;   // create an instance of type C, passes array // ("a" => 1, "b" => 2) as an argument to the C's ctor: object c = context. NewObject ( "C" , PhpArray. Keyed ( "a" , 1 , "b" , 2 ) ) ;   // var_dump the object: PhpVariable. Dump ( c ) ; } } }

You can use Visual Studio to build the C# program, or if you prefer command line compiler just run the following:


C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Csc.exe /reference:"C:\Program Files\Phalanger v2.0\PhpNetCore.dll" /reference:"ClassLibrary.dll" /out:ConsoleApplication.exe /target:exe Program.cs

And that's it 8-)! If you run the resulting application you'll get:


<code> Library initialized: Now, you can use classes and functions declared here. Hello! object(C)(2) {


["array"] => array { [0] => integer(1) [1] => integer(2) [2] => integer(3) } ["data"] => array { ['a'] => integer(1) ['b'] => integer(2) }

} <code>

No comments:

About Me

Ordinary People that spend much time in the box
Powered By Blogger