PHP 5.4 – El espectáculo continúa

by Christian Soronellas on julio 2, 2011

Muchos todavía estamos descubriendo las bondades de PHP5.3 y sus novedades y aún hay muchos sitios importantes que corren sobre PHP5.2. Sin embargo, el equipo que hace PHP no descansa y recientemente han publicado la primera versión alpha de lo que será PHP5.4 que promete muchas mejoras tanto en rendimiento como en funcionalidades.

Mi compañero Ricard Clau y yo hemos estado haciendo algunas pruebas con esta versión y aquí os presentamos algunas de las novedades que consideramos más destacadas.

Traits

Probablemente el plato estrella de la versión. Un trait viene a ser algo así como un trozo de clase que podemos importar en varios sitios. Además, en una clase hija, podemos heredar de varios traits. Y con esto, en parte, conseguimos la tan deseada por algunos herencia múltiple en cierta manera.

<?php
trait Singleton
{
  private static $_instance;
  private function __construct(){}

  public function __clone()
  {
    throw new Exception('This object cannot be cloned!');
  }

  public static function getInstance()
  {
    if (null === static::$_instance) {
      static::$_instance = new static();
    }

    return static::$_instance;
  }
}

class Product
{
  use Singleton;
}

$product = Product::getInstance();

Más fácil aún hacer Singletons y sobretodo, centralizado el código de instanciación.

Podéis ver algunos ejemplos más con, por ejemplo, tratamiento de colisiones al hacer el use de varios traits con funciones idénticas y algunos otros ejemplos en esta web.

Array Deferencing

Esto es algo bastante molón que hasta ahora no se podía hacer. Cuántas veces habéis tenido que llamar a una función que devuelve un array y al tener que tratar su resultado habéis pensado: Qué bien me iría poder poner corchetes al resultado de la función directamente. Pues eso por fin se puede hacer:

<?php
echo call_user_func(function(){return array('test', 'deferencing');})[1];

Aquí veríamos un ‘deferencing’ en consola. Muy a lo JavaScript.

DTrace

El DTrace es un sistema de debug de aplicaciones en tiempo real en entornos de producción. Usa scripts en “D” para debuggar partes de la aplicación al alcanzar ciertas condiciones (qué X archivo se ha abierto, qué Y linea se ha alcanzado, etc. ) y así aportar visibilidad en entornos de producción. Lejos ha quedado aquel tiempo en que las webs eran solamente una sección de noticias y un triste catálogo. Y a veces, tenemos aplicaciones monstruosas donde es complicado ver la secuencia de llamadas. Seguro que esto ayuda a encontrar errores en nuestra aplicación.

Mejoras en memoria y rendimiento de Zend Engine

Este punto es súper importante que no se descuide nunca. Bien es cierto que con los cacheos (HTTP_Cache, CDNs varios, Memcached, etc.) con APC para Opcode Cache y el resto de técnicas de high-performance se optimiza mucho. Pero al final, optimizando el core de PHP se ganará muchísimo ya que por la naturaleza de PHP, cada Request vuelve a empezar todo y el proceso de bootstraping debe ir lo más rápido posible.

Paso a PECL de la extensión de SQLite

Cada vez se usa más SQLite, para testear la BBDD, para entornos de desarrollo locales y es importante tener claro cómo trabajar con ella y cómo instalar la extensión para PHP.

Rotura con algunas miserias del pasado

Desaparecen por fin settings de tan infausto recuerdo como safe_mode, register_globals (cuánto daño ha hecho), register_long_arrays, allow_call_time_pass_reference, etc.

También desaparecen las siguientes funciones relacionadas con el tratamiento de sesiones: session_is_registered(), session_register() and session_unregister()

Además, el tema del break y el continue, queda de la siguiente manera: podemos hacer break y continue para salir de un bucle, break 2 o continue 3 para saltarnos varias iteraciones pero no podemos hacer un break $i. Nos dará un error de algo así como Expected Constant Value.

<?php
  public function testBreakI()
  {
    $z = 2;
    for($i = 0; $i < 10; $i++)
      for($j = 0; $j < 10; $j++)
        if ($i == 2 && $j == 2)
          break $z;

    var_dump($i, $j);
  }
  testBreakI();

Y en php.ini, el default encoding es UTF-8, el short tag de template

Conclusión

Es para mí, notícia de gran alegría, ver cómo un lenguaje al qué le profeso auténtica devoción va evolucionando día a día. Desde aquí dar las gracias a toda la comunidad de PHP por hacerlo más grande versión a versión. Y qué siga así por mucho más.

Si bien es cierto qué siempre hay cosas qué mejorar, pues soy firme creyente en qué siempre hay margen de mejora, cómo por ejemplo el tema de la superpoblación de frameworks o la perversión de CMSs.

Pero … que grande qué es PHP!

Leave your comment

Required.

Required. Not published.

If you have one.