Las nuevas clases, métodos e interfaces de PHP 5.5

25 de junio de 2013

Nuevas clases e interfaces

La extensión cURL ha añadido la clase CURLFile para simplificar el tratamiento de los archivos subidos mediante peticiones POST de HTTP:

$curl = curl_init('http://librosweb.es/subir_archivo.php');
$archivoCurl = curl_file_create('foto.jpg');

// ...

En el ejemplo anterior, la variable $archivoCurl es de tipo CURLFile, por lo que puedes obtener o modificar su información a través de los métodos de esa clase;

$archivoCurl = curl_file_create('foto.jpg');

// obtener información básica sobre el archivo
$nombreArchivo = $archivoCurl->getFilename();
$tipoMime = $archivoCurl->getMimeType();

// cambiar el nombre del archivo que se subirá
$archivoCurl->setPostFilename('nuevo_nombre_archivo.jpg');

La extensión Intl ha añadido varias nuevas clases, siendo las más importantes IntlCalendar, IntlGregorianCalendar y IntlTimeZone.

La extensión Date/Time ha añadido la clase DateTimeImmutable. Esta clase es idéntica a la clase DateTime salvo que su valor nunca se modifica. Al ejecutar por ejemplo el método modify() sobre un objeto de esa clase, se devuelve un nuevo objeto con la nueva fecha/hora.

Hasta ahora, cuando modificabas una fecha con el método modify() se podían producir efectos inesperados si no tenías cuidado:

$presente = new DateTime();
$futuro   = $presente->modify('+1 day');

// $presente === $futuro

Para evitar el problema anterior, debías clonar la fecha original y modificar después la fecha clonada:

$presente = new DateTime();
$futuro   = clone $presente;
$futuro   = $futuro->modify('+1 day');

// $presente !== $futuro

Gracias a la nueva clase DateTimeImmutable, ya no es necesario clonar la clase antes de modificarla:

$presente = new DateTimeImmutable();
$futuro   = $presente->modify('+1 day');

// $presente !== $futuro

Esta extensión también ha añadido la interfaz DateTimeInterface con los siguientes métodos:

interface DateTimeInterface {
    public string format(string $format);
    public int getOffset();
    public int getTimestamp();
    public DateTimeZone getTimezone();
    public DateInterval diff(DateTimeInterface $datetime2, bool $absolute = false);
    public __wakeup();
}

Nuevos métodos

La extensión MySQLi ha añadido tres nuevos métodos:

  • mysqli::begin_transaction(), indica que debe empezar una transacción.
  • mysqli::release_savepoint(), deshace los cambios de una transacción y vuelve hasta el punto de guardado que se indica.
  • mysqli::savepoint(), crea un nuevo punto de guardado dentro de una transacción.

La extensión intl ha añadido los siguientes cuatro nuevos métodos para la clase IntlDateFormatter:

  • IntlDateFormatter::formatObject(), formatea el objeto de tipo IntlCalendar o DateTime que se le pasa aplicando el formato indicado.
  • IntlDateFormatter::getCalendarObject(), devuelve una copia del calendario interno que está utilizando este formateador de fechas. Además del calendario gregoriano utilizado en la mayoría de países, el calendario devuelto puede ser de tipo japonés, budista, islámico, etc.
  • IntlDateFormatter::getTimeZone(), devuelve la zona horaria utilizada por el objeto formateador de fechas.
  • IntlDateFormatter::setTimeZone(), establece la zona horaria utilizada por el objeto formateador de fechas.

Otros cambios relacionados con las clases

A partir de PHP 5.5, las palabras clave self, parent y static utilizadas en las clases ya no distinguen las mayúsculas, por lo que self::MI_CONSTANTE es equivalente a SELF::MI_CONSTANTE.