Comparatíva de Frameworks PHP 5.3 (Parte 1)

por Óscar Antón el a las

En este artículo comparamos los nuevos frameworks desarrollados en PHP 5.3, sus aciertos y fallos, pero sobre todo intentando hablar desde la experiencia de uso. Compararemos FuelPHP, Fat Free Framework, Laravel, Synfony2 y Lithium.

En el artículo anterior, hice una comparatíva de diferentes frameworks para php, de modo que con este nuevo artículo, pretendo ahondar mas en los nuevos frameworks que estan sabiendo aprovechar las nuevas funcionalidades de php 5.3 (que no son pocas).

Novedades en PHP 5.3

Voy a resumir algunas de las novedades que se incluyen a partir de la versión 5.3 de php:

  • Closures: Ahora podemos usar funciones inline como en javascript, veamos un ejemplo;

    <?php
     $a = array(3, 2, 5, 6, 1);
     
     usort($a, function ($a,$b) {$a==$b ? 0:(($a<$b)?-1:1);});
     ?>

    En este ejemplo ordenamos un array sin tener que definir previamente una función, muy al estilo de jQuery.

  • Namespaces: Una característica que muchos programadores echábamos de menos en un lenguaje cada vez mas orientado a objetos.
    Funciona de forma similar a los packages de java o los namespaces de C#, solo que es necesario usar autoloaders para no equivocarnos al cargar clases.
    Varios de los frameworks que tratamos en este artículo hacen un buen uso de los namespaces para ordenar clases y cargarlas bajo demanda (autoloaders).

    <?php
    namespace MiNamespace\Core\Controller;
    
    use Framework\Core;
    use Framework\Core\View;
    use Framework\Core\Response;
    
    class Controller_Comun extends Controller {
    	public $template = 'template';
    ...	
     }
     ?>
  • Herencia de métodos estáticos: Vereis que varios frameworks de nueva ornada usan el modelo de llamadas estático:


    <?php
    	Framework::Request()->get('var');
     ?>

    Esto se suele hacer para simplificar el código y ganar rendimiento, reduciendo el consumo de memoria en el servidor (menos objetos en memoria).

Análizamos Fat Free Framework

Ya le citamos en nuestro anterior artículo, se trata de un framework bastante libiano y ampliable mediante plugins.

A mi personalmente me gusta para proyectos pequeños o medianos, ofrece todo tipo de utilidades y es bastante rápido, con unos consumos de memoria moderados (entre 3 MB y 9 MB).

El estilo es bastante sencillo y ofrece un sistema de rutas muy chulo.

Para que os hagais una idea puedes desarrollar una aplicación sencilla en unos pocos minutos, os pongo un ejemplo:

<?php
require_once 'path/to/base.php';
F3::route('GET /home', function () {
		echo 'Hello, world!';
	});
F3::run();
?>

Como veis, un estilo bastante sencillo, este código básicamente representa un controlador para la ruta /home que nos devuelve el típico 'Hello, world!'

Para hacer algo un poco mas complejo, podemos usar el sistema de plantillas que propone Fat-free, por un lado podriamos utilizar la plantilla template.html:

<p>Hola, !</p>

Por otro lado tenemos el controlador:

<?php
require_once 'lib/base.php';
F3::route('GET /test', function() {
		F3::set('nombre','foo');
		echo Template::serve('template.htm');
	});
F3::run();
?>

El resultado de la página sería Hola, foo!

Para el acceso a datos Fat-free usa varios ORMs uno llamado Axom (para MySQL) y otro llamado M2 (para MongoDB) y también implementa un formato propio para ficheros de texto plano, os pongo dos ejemplos de uso:

<?php
require_once 'lib/base.php';
F3::set('DB',
	new DB(
		'mysql:host=localhost;port=3306;dbname=mysqldb',
		'admin',
		'wh4t3v3r'
	)
);
$user=new Axon('users');
$user->load('userID="tarzan"');

// Define the MongoDB connection string
F3::set('DB',new MongoDB(new Mongo('mongodb://localhost:27017'),'testdb'));
$user=new M2('users');
$user->load(array('userID'=>'tarzan'));
?>

En el ejemplo anterior, estamos consultado la tabla 'users' en MySQL y MongoDB, en la documentación oficial podeis ver mas ejemplos, pero como podeis observar, Fat-free incluye varias librerías para el tratamiento de datos (estas librerías se cargan como plugins).

Tampoco me quiero enrollar mucho, simplemente quiero repasar algunas de las funcionalidades de Fat-free, para que valoreis si se ajusta a vuestras necesidades, podeis consultar mas sobre el proyecto en este enlace.

En los siguientes artículos, veremos FuelPHP, Synfony2 y Lithium en acción, varios benchmarks y casos de uso...

facebook

twitter