Está en la página 1de 13

Universidad de San Carlos de Guatemala

Facultad de Ingeniería
Organización de Lenguajes y Compiladores 2

Phalanger, un compilador
PHP-Silverlight
Phalanger y su proceso para compilar código PHP a lenguaje de
contenido interactivo Microsoft Silverlight

Manuel Josué Carrillo Ordóñez

200412975

2008
Universidad de San Carlos de Guatemala
Facultad de Ingeniería - Organización de Lenguajes y Compiladores 2-

Índice

Contenido Página
Introducción 3

Objetivos Generales y Específicos 4

Planteamiento del Problema 5

PHP y el contenido dinámico 6

Microsoft Silverlight 8

El proyecto Phalanger 9

Proceso de Compilación Phalanger 10

Ejemplo propuesto 11

Conclusiones Generales 13

Recomendaciones 13

Bibliografía 13

2
Universidad de San Carlos de Guatemala
Facultad de Ingeniería - Organización de Lenguajes y Compiladores 2-

Introducción

La siguiente investigación esta dedicada al proceso de compilación que utiliza la


herramienta Phalanger para poder convertir código PHP a uno entendible por la
plataforma de trabajo .NET como Silverlight, con el objetivo final de crear contenido
tanto dinámico como interactivo para el visitante de un sitio web.

Antes de comenzar con el tema propio de la investigación, se tocarán algunos puntos


referentes al estado de la web actualmente con respecto al manejo de contenido
dinámico, con el fin de dar a entender el uso y utilidad que puede dársele a Phalanger, la
herramienta discutida a lo largo del presente trabajo.

Como primera parte de la investigación, se verán los aspectos generales de las


herramientas PHP y Silverlight y como ambas pueden enfocarse en un objetivo común,
en este caso, la generación de contenido dinámico en la web.

Luego, veremos como surge la herramienta Phalanger como una alternativa para unir
todas las bondades del lenguaje PHP a uno de los entornos más utilizados para
desarrollo web actualmente como .NET.

Una vez tengamos una visión general de la herramienta Phalanger, haremos énfasis en
como utiliza el proceso de compilación, tanto en análisis y síntesis para poder tomar
código PHP y convertirlo en un lenguaje entendible por .NET.

Por último, Con el código .NET generado a partir de PHP con Phalanger, veremos como
unirlo con la tecnología Silverlight para poder generar contenido dinámico e interactivo
en la web, con la ayuda de archivos con estructura XML.

3
Universidad de San Carlos de Guatemala
Facultad de Ingeniería - Organización de Lenguajes y Compiladores 2-

Objetivos

Generales

- Entender el uso que puede dársele a tanto a PHP como a Silverlight en el


desarrollo de aplicaciones web tanto dinámicas como interactivas.

- Tener una visión general del funcionamiento de PHP y Silverlight.

- Conocer el funcionamiento de Phalanger como un compilador que toma


código PHP y lo convierte a un lenguaje entendible por la plataforma de
desarrollo .NET.

Específicos

- Conocer algunas de las aplicaciones dinámicas existentes en la web que pueden


ser realizadas mediante el uso del lenguaje PHP.

- Tener una visión de cómo el contenido dinámico se utiliza actualmente en sitios


web.

- Comprender y analizar a fondo el proceso de compilación que se lleva a cabo


para poder generar código .NET, que luego será utilizado junto con archivos
XAML por Silverlight para poder crear contenido interactivo y dinámico para la
web.

4
Universidad de San Carlos de Guatemala
Facultad de Ingeniería - Organización de Lenguajes y Compiladores 2-

Planteamiento del problema:

Uno de los inconvenientes en las primeras versiones de la web es que mucho del
contenido de las páginas era estático, es decir, el contenido siempre era el mismo
independiente de la solicitud echa por el usuario. Ésto hacía que muchas veces el
contenido manejado por los diversos sitios no estuviera actualizado y consistente.

En la actualidad este comportamiento aun se puede ver en sitios en donde podría


utilizarse una herramienta para poder generar contenido dinámico y de esta manera ser
más productivo y eficiente en cuanto al manejo de la información.

Una de las herramientas para generar dicho contenido es PHP ya que gracias a su poder
y flexibilidad brinda todas las herramientas para poder generar contenido dinámico e
interactivo en una plataforma a la vez tan cambiante como la web.

En los últimos años, Microsoft ha querido dar un auge en el desarrollo web mediante
distinto tipo de tecnología, en particular con su plataforma .NET, haciendo uso de su
aplicación Silverlight para la generación de contenido dinámico e interactivo.

Tomando en cuenta lo anterior, el inconveniente era la no compatibilidad de PHP con


ambientes de trabajo Microsoft, he aquí cuando surge Phalanger, un compilador que
toma código PHP y genera instrucciones entendibles por .NET para la creación de
contenido dinámico e interactivo con Silverlight.

5
Universidad de San Carlos de Guatemala
Facultad de Ingeniería - Organización de Lenguajes y Compiladores 2-

Marco Teórico

PHP y el contenido dinámico

PHP es un lenguaje interpretado de alto nivel, que se encuentra “embebido” o


incrustado en páginas HTML, dicho contenido se ejecuta del lado del servidor.

Pongamos un ejemplo, supongamos que tenemos el siguiente código HTML:

Dentro de las etiquetas de inicio y fin de PHP se encuentra el código que deseamos
ejecutar del lado del servidor, a diferencia de Javascript que se ejecuta del lado del
cliente (por medio de Java Runtime Environment), todo el código PHP se ejecuta del
lado del servidor, incluso, es posible configurar el servidor para que procese todo
HTML cargado mediante PHP.

¿Por qué utilizarlo?

Aunque su uso pueda parecer complicado al inicio, al descubrir PHP a fondo podemos
ver que nos ayuda de diferentes formas: es multiplataforma, quiere decir que no importa
en el sistema operativo en el cual desarrollemos siempre lo podemos tomar en cuenta.
Al ser de código abierto, podemos tener acceso a múltiples foros e índices en donde
podemos encontrar información valiosa de cómo implementar una solución utilizando
PHP; soluciones que van desde soporte a base de datos, protocolos web, LDAP para
versionamiento de software, etc.

Sabiendo que PHP es un lenguaje, que puede ser incrustado dentro de páginas HTML y
todos los beneficios que trae (manejo de bases de datos, soporte para distintos
protocolos, etc.) , veamos la característica que más nos interesa por el momento, el
contenido dinámico.

Supongamos que el contenido (imágenes, etc.) de una página permanecen invariantes


ante la solicitud de cualquier usuario final, se dice que el contenido es estático, pero si
dicho contenido se genera en función de la petición de un usuario, estamos ante un
contenido dinámico.

6
Universidad de San Carlos de Guatemala
Facultad de Ingeniería - Organización de Lenguajes y Compiladores 2-

PHP

Un ejemplo sencillo de PHP y como utilizarlo en el manejo de contenido dinámico es en


algunos foros que encontramos en la web, acá tenemos un ejemplo:

En este foro, podemos ver que la página de inicio fue hecha con PHP:

Esto permite tener un control sobre el contenido que se genera en forma dinámica sobre
las diferentes categorías que se encuentran en el sitio:

PHP también ayuda a los administradores del sitio a mantener cierto orden en las
conversaciones y comentarios que los diferentes usuarios colocan en las distintas
categorías del sitio, dichas conversaciones y comentarios obviamente se generan en
forma dinámica.

El contenido PHP embebido en paginas HTML se ejecuta del lado del servidor que
aloja el sitio y presenta información actualizada en todo momento al usuario, lo cual es
valioso en un sitio de este tipo para tener siempre la versión “actual” de la pagina que el
visitante este navegando en ese momento.

7
Universidad de San Carlos de Guatemala
Facultad de Ingeniería - Organización de Lenguajes y Compiladores 2-

Microsoft SilverLight

Silverlight nace como la alternativa de Microsoft para crear


contenido tanto dinámico como interactivo en la web. Su uso se
ha extendido a plataformas tanto Windows como Mac y
ofreciendo la creación de animaciones, foros, etc. Integrando
para ello todo el software disponible o compatible con la
arquitectura de .NET, su uso se basa principalmente en uno de
los nuevos paradigmas de la red, el cual basa su atención en el
uso de archivos XML tanto para el desarrollo como la depuración de aplicaciones web.

Dentro de las características que hacen a esta herramienta tan útil y versátil se encuentra
la capacidad de crear contenidos completamente interactivos para el usuario, acá
podemos ver una muestra de ello:

Silverlight trabaja principalmente en el desarrollo de aplicaciones RIA (Rich Internet


Applications) que son básicamente todas aquellas aplicaciones web que cumplen la
funcionalidad de una aplicación de escritorio, por ejemplo reproducción de audio y
video, presentación de una galería de imágenes, etc.

La capacidad de fusionar Silverlight con un entorno de desarrollo como .NET lo hace


realmente flexible y versátil, ya que podemos incrustar en una aplicación Silverlight
código escrito en algún lenguaje .NET como Visual Basic o C# para poder crear
contenido dinámico, interactivo y atractivo para el usuario final.

Su integración por medio de un modulo con el entorno de


desarrollo .NET hace de Silverlight una opción a tomar en
cuenta si se desea crear contenido dinámico e interactivo en la
web.

8
Universidad de San Carlos de Guatemala
Facultad de Ingeniería - Organización de Lenguajes y Compiladores 2-

El Proyecto Phalanger

Phalanger es una nueva implementación para poder incorporar código PHP en


aplicaciones desarrolladas con .NET.

Phalanger brinda a los desarrolladores la posibilidad de utilizar toda la flexibilidad y


soporte que provea el lenguaje PHP y mezclarlo con los beneficios del framework
utilizado por las aplicaciones web desarrolladas bajo .NET (como Silverlight).

Phalanger también puede operar sobre sistemas GTK que trabajan sobre sistemas
Linux, en entornos de programación como MONO que se utiliza para desarrollo de
código en C#, acá podemos ver una pequeña ventana en donde se ha incrustado una
instrucción PHP dentro de la aplicación:

Para poder incrustar componentes dinámicos en páginas HTML, Phalanger puede usar
archivos XAML para poder construir dichos componentes que serán entendibles por
Silverlight, y código PHP para encapsular su comportamiento.

Desde la versión 5 de PHP, podemos hacer uso de clases para poder manejar lo que se
denomina “un objeto” PHP, como se menciono anteriormente, en esta clase es en donde
se manejara la lógica o comportamiento de los componentes dinámicos que vayan a ser
construidos. Acá tenemos un pequeño ejemplo de una clase de este tipo:

Class Manager extends Employee


{
public function __construct($level, Manager $reportsTo)
{
parent::__construct($reportsTo);
$this->level = $level;
}
public static function GetMaxLevel()
{
return self::$maxLevel;
}
private $level;
public static $maxLevel = 5;
}

9
Universidad de San Carlos de Guatemala
Facultad de Ingeniería - Organización de Lenguajes y Compiladores 2-

Phalanger

El primer objetivo de Phalanger es convertir los objetos declarados en esas clases en


código totalmente compatible con PHP, por ejemplo agregando búsqueda de miembros
o reglas de sobre escritura de métodos.

El segundo objetivo de Phalanger (el más importante para esta investigación), es hacer
que esta herramienta tome el código PHP, lo compile y obtenga como resultado código
que pueda ser consumible por aplicaciones de desarrollo como C#, o un modulo de
programación Silverlight.

Veamos un diagrama del proceso de compilación de Phalanger:

Codigo PHP Phalanger Silverlight

•Clase que •Lleva a cabo el •Hace uso del


contiene el proceso de codigo .NET
codigo PHP para analisis y generado por
la aplicacion, síntesis para Phalanger para
puede ser el poder generar poder consumir
encargado de el codigo dicho codigo.
manejar entendible por
eventos, envio y la arquitectura
recepcion de .NET
datos, etc.

Para poder consumir el código producido por Phalanger, tenemos que hacer uso de los
tipos ClrObject que no son más que instancias “internas”; en otras palabras, cada
ClrObject es una instancia de cada objeto PHP compilado.

Veamos el siguiente diagrama para comprender la generación de los tipos ClrObject:

ClrObjects
Clase PHP (Objetos
(Contiene compilados
Phalanger
los objetos y
originales) entendibles
por .NET)

A continuación veremos un ejemplo, en donde tenemos una clase escrita en PHP y


Phalanger compila dicho código para obtener objetos consumibles por cualquier
aplicación que utilice el framework de .NET.

10
Universidad de San Carlos de Guatemala
Facultad de Ingeniería - Organización de Lenguajes y Compiladores 2-

Ejemplo

Tenemos la siguiente clase escrita en código PHP:


class A
{
const c = 3.14;
public $a = "test";
protected static $b = TRUE;
public function __construct(A $t = NULL)
{
if ($t != NULL) $this->a = $t->a;
}
private static function Foo()
{
return array(0 => "zero", 1 => "one");
}
}

Analisis Léxico

Analisis Sintáctico
Phalanger Analisis Semántico

Síntesis (Código .NET)

El código generado es el siguiente:


[
Serializable, ImplementsType]
public class A : PhpObject
{
// Constructors
(C1) static A();
(C2) protected A(SerializationInfo, StreamingContext);
(C3) public A(ScriptContext context, DTypeDesc caller);
(C4) public A(ScriptContext context, bool newInstance);
// Methods
(M1) public virtual object __construct(ScriptContext,
[Optional, DTypeSpec(3, 0x2000004)] object t);
(M2) public static object __construct(object instance, PhpStack stack);
(M3) private static object Foo(ScriptContext context);
(M4) private static object Foo(object instance, PhpStack stack);
(M5) /* privscope */ static object <^Getter>(object instance);
(M6) /* privscope */ static object <^Getter>(object instance);
(M7) /* privscope */ static void <^Setter>(object instance, object
value);
(M8) /* privscope */ static void <^Setter>(object instance, object
value);
(M9) /* privscope */ object <Mediator>(ScriptContext, object);
(M10) public static void __InitializeStaticFields(ScriptContext context);
(M11) private static void __PopulateTypeDesc(PhpTypeDesc);
(M12) private void <InitializeInstanceFields>(ScriptContext);
// Fields
[PhpHasInitValue]
(F1) public PhpReference a;
[ThreadStatic, PhpHasInitValue]
(F2) protected static PhpReference b;
(F3) public static readonly object c;
[ThreadStatic]
(F4) private static ScriptContext <lastScriptContext>;
(F5) public static readonly PhpTypeDesc <typeDesc>;
}

11
Universidad de San Carlos de Guatemala
Facultad de Ingeniería - Organización de Lenguajes y Compiladores 2-

El código generado será utilizado por Silverlight para manejar la lógica del componente
que será creado, para poder crear el manejador de la GUI debemos usar un tipo especial
de XML denominado XAML.

Veamos que es un archivo XAML y su uso en aplicaciones Silverlight:

XAML es un lenguaje declarativo basado en XML, se encuentra presente en


prácticamente todas las aplicaciones Silverlight, es utilizado para describir los
elementos pertenecientes a la GUI de la aplicación.

El archivo XAML puede usarse tanto para definir formas, como animaciones o
contenido interactivo en Silverlight.

Este es un pequeño ejemplo de un archivo XAML:

Con el código .NET compilado con Phalanger y el archivo XAML, Silverlight puede
construir un componente dinámico e interactivo que puede ser incrustado en una
página phpx o aspx:

Archivo XAML Código .NET

Contenido
dinámico

12
Universidad de San Carlos de Guatemala
Facultad de Ingeniería - Organización de Lenguajes y Compiladores 2-

Conclusiones Generales

A lo largo de la investigación pudimos ver lo siguiente:

- Conocer a grandes rasgos el lenguaje PHP, algunas de aplicaciones que pueden


ser desarrolladas usándolo, en particular como es utilizado para la creación de
contenido dinámico en la web.
- Conocimos la alternativa de Microsoft para el desarrollo de contenido dinámico
e interactivo (Silverlight) y cómo se integra con su entorno de desarrollo .NET
para crear un estándar en la creación de contenido web.
- Vimos como Phalanger utiliza el proceso de compilación para poder generar
código entendible por la plataforma .NET a partir de un lenguaje fuente como
PHP.

Uno de los entornos más utilizados actualmente para el desarrollo de contenido


dinámico e interactivo es PHP gracias a su poder y flexibilidad en el desarrollo de
módulos web para mantener un control sobre la información que se maneje en un sitio
en particular.

Una de las “desventajas” es que al ser PHP un código independiente de Microsoft, no


puede asegurarse el cien por ciento su compatibilidad con algunos componentes.

Para solucionar lo anterior, surge el proyecto Phalanger, que trata de unificar todas o
muchas de las características de PHP para que éstas sean totalmente compatibles con el
entorno de desarrollo .NET. Phalanger no es más que un compilador que toma código
PHP y lo convierte a un lenguaje totalmente compatible con .NET.

Con el lenguaje PHP ya transformado en .NET por Phalanger, se puede integrar


fácilmente a cualquier aplicación de desarrollo Microsoft para poder fusionarlo con
Microsoft Silverlight.

Recomendaciones
Es recomendable realizar un análisis del tipo de información manejada por el sitio, ver
si es necesario incorporar contenido dinámico o simplemente implicaría tanto costo
como tiempo innecesario en su desarrollo y mantenimiento.
Estudiar a fondo las distintas posibilidades tanto en funcionalidad como costo de las
diversas herramientas existentes en el mercado para poder generar contenido en la web,
de ésta forma nos aseguramos que los recursos invertidos sean los apropiados.

Bibliografía
http://tomasp.net/blog/phalanger-future-notes.aspx
http://www.php-compiler.net/doku.php?id=php-in-silverlight
http://www.microsoft.com/silverlight/default.aspx
http://es.wikipedia.org/wiki/.php
http://www.php.net/

13

También podría gustarte