Phalanger: PHP para .NET
Phalanger
es un compilador escrito en C#, para poder compilar PHP en MSIL. Phalanger
tiene soporte para la versión 5.x de PHP, por lo cual podremos hacer uso de las
funcionalidades de la Programación Orientada a Objetos.
Entre las características
más remarcables a mencionar de Phalanger y que serían los motivos para usarlo
en contra de PHP nativo, sería que se tiene acceso a todas las clases de .NET
escritas para C#, en otras palabras interoperabilidad simplificada con lenguajes
.NET y el uso de un compilador Just in-Time en vez de un intérprete, lo cual
significa un aumento de velocidad considerable.
(http://www.php-compiler.net/benchmarks)
El proyecto
es OpenSource, por lo que pueden bajar los binarios o el código fuente de
Codeplex (http://phalanger.codeplex.com/); el instalador es bastante intuitivo
y se encarga de casi el 100% de las configuraciones necesarias para que podamos
crear soluciones con este producto.
El soporte
de Phalanger para Visual Studio es bueno, no como para otros lenguajes, pero lo
suficiente como para que podamos desarrollar de una manera cómoda. Para
mostrarles cómo funciona voy a crear una aplicación simple de prueba en modo
consola.
Nuestro
primer paso consiste en crear un proyecto del tipo Phalanger Console
Application, al que lo nombraremos Test2:
Nuestro
siguiente paso será crear 2 funciones, una llamada WriteInstanceFunction y otra
llamada WriteStaticFunction, como sus nombres indican una función será del tipo
estática y la otra del tipo de Instancia:
function WriteIntanceFunction()
{
echo
"Hello From an Instance Function\n";
}
static
function WriteStaticFunction()
{
echo
"Hello From a Static Function\n";
}
El siguiente paso sera llamar a esas funciones
dentro de nuestro metodo Main:
static function Main()
{
echo
"Welcome to Phalanger!\n";
//Creating
an Object of type Program
$p=new
Program();
//Calling
the method WriteInstanceFunction
$p->WriteIntanceFunction();
//Calling
an Static Function form Class Program
Program::WriteStaticFunction();
fgets(STDIN);
return
0;
}
Si hacemos
correr el Código podremos ver los mensajes en una ventana de consola, como se
muestra a continuación:
Si analizamos el código de arriba, veremos
primero que a diferencia de otros lenguajes .NET, para obtener la instancia de
un objeto no debemos de declarar una variable de la forma "Type
VaribleName;", luego como segundo punto tenemos que para acceder a los métodos
de un objeto, usaremos el operador "->" en vez del "."; después podemos ver que para
acceder a métodos estáticos de una clase usamos el operador "::", y
por ultimo tenemos que para realizar una lectura de datos desde consola estamos
usando el método "fgets(STDIN);".
Con lo anterior ya sabemos crear una aplicación
simple de consola en un solo archivo, pero que pasa cuando deseamos crear una aplicación
más grande que requiere ser escrita en múltiples
archivos?, para cubrir ese caso vamos a crear una clase llamada
"Person", que va a estar en un archivo aparte. Nuestro primer paso será
agregar un nuevo archivo:
Este
archivo solo viene con un constructor, por lo cual vamos a agregar un Atributo
llamado "Name" junto con sus respectivos métodos de acceso:
namespace Test2 {
class
Person {
var
$name;
public
function __construct()
{
$this->name="A Name";
}
function
SetName($_name)
{
$this->name=$_name;
}
function
GetName()
{
return $this->name;
}
}
}
Como vemos
en el código la clase es bastante sencilla donde los únicos 2 puntos a destacar
serian, que primero nuestra clase esta englobada en un espacio de nombres
(namespace Test2) y segundo que para que los objetos instanciados de esta clase
funcionen correctamente (que las operaciones get y set se lleven a cabo de la
forma esperada) debernos manipular el artibuto name, junto a la palabra clave
this, de la siguiente forma "$this->NombreAtributo".
Como
siguiente paso en nuestra clase Program, agregaremos las siguientes líneas
debajo la llamada a la función estática WriteStaticFunction:
$persona=new Test2\Person();
$temp="Mr. Coffee";
$persona->SetName($temp);
echo "Hello "
. $persona->GetName();
Y después
agregaremos la sentencia "use Test2;" como primera sentencia después
de la línea <? php. Si hacemos correr la aplicación, veremos lo siguiente:
Analizando
los cambios hechos, tenemos 2 cosas nuevas, la primera es que para importar un
espacio de nombres hemos usado la palabra reservada "use" seguida del
nombre de espacio que deseamos importar y como segundo punto tenemos que a
persar de haber importado el espacio de nombres y de que la clase pertenece a
la misma aplicacion debemos usar la siguiente sintaxis para poder usar una
clase ubicada en otro archivo que pertenesca a cierto espacio de nombres:
"NameSpace\Class".
Como una observación
extra les indico que si quitamos el espacio de nombres del archivo que contiene
la clase Person, se puede crear el objeto sin usar la sintaxis anteriormente
explicada.
Para
finalizar el presente post vamos a ver cómo usar un par de funcionalidades de
.NET, que son los métodos WriteLine y ReadLine de la Clase Console, para lo
cual vamos a incluir el espacio de nombres "System" y despues vamos a
agregar el siguiente código a nuestro Main:
System\Console::Write("Insert
Your Name: ");
$temp=System\Console::ReadLine();
Si lo
ejecutamos tendremos lo siguiente:
Espero que les sea de ayuda
este post. Suerte!
se puede conceatar phalanger con sqlserver?
ResponderEliminar