Las nuevas funciones de PHP 5.5
Nuevas funciones del núcleo de PHP
Una de las nuevas funciones más útiles añadidas por PHP 5.5 es
array_column(), que extrae todos los valores de una determinada columna del array multidimensional indicado.
Si utilizas por ejemplo PDO para obtener registros de una base de datos, aunque sólo quieras obtener una columna, el resultado siempre es un array multidimensional:
$resultado = array( array('nombre' => 'Usuario 1'), array('nombre' => 'Usuario 54'), array('nombre' => 'Usuario 231'), array('nombre' => 'Usuario 4'), // ... );
Gracias a la nueva función
array_column(), resulta muy sencillo aplanar ese array para quedarse solamente con la columna nombre:$nombres = array_column($resultado, 'nombre');
La función
array_column() solamente permite extraer una columna cada vez, pero admite un tercer parámetro opcional que indica la columna cuyos valores se utilizan como claves del nuevo array. Imagina que el array del ejemplo anterior tuviera más columnas de información:$resultado = array( array( 'id' => 1, 'nombre' => 'Usuario 1', 'edad' => '...', ), array( 'id' => 54, 'nombre' => 'Usuario 54', 'edad' => '...', ), array( 'id' => 231, 'nombre' => 'Usuario 231', 'edad' => '...', ), array( 'id' => 4, 'nombre' => 'Usuario 4', 'edad' => '...', ) ); $nombres = array_column($resultado, 'nombre'); $nombresOrdenadosPorId = array_column($resultado, 'nombre', 'id');
El resultado de ejecutar el código anterior sería:
$nombres = array( 0 => 'Usuario 1', 1 => 'Usuario 54', 2 => 'Usuario 231', 3 => 'Usuario 4', // ... ); $nombresOrdenadosPorId = array( 1 => 'Usuario 1', 54 => 'Usuario 54', 231 => 'Usuario 231', 4 => 'Usuario 4', // ... );
Los valores de la columna que se utiliza como clave no tienen que ser necesariamente numéricos. Si los valores son cadenas de texto, la diferencia será que el array resultante es asociativo en vez de numérico.
La nueva función
json_last_error_msg() devuelve el último mensaje de error producido al ejecutar la función json_encode() o json_decode(). Si no se ha producido ningún error, devuelve null.
Las versiones anteriores de PHP incluyen varias funciones para convertir una variable a un tipo determinado:
intval(), floatval() y strval(). Ahora PHP 5.5 añade la función que faltaba:boolval(), que convierte cualquier variable en un valor booleano:boolval(0); // false boolval(42); // true boolval(0.0); // false boolval(4.2); // true boolval(""); // false boolval("string"); // true boolval([1, 2]); // true boolval([]); // false boolval(new stdClass); // true
Nuevas funciones relacionadas con bases de datos
La extensión
MySQLi ha añadido tres nuevas funciones relacionadas con las transacciones: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.
Por su parte, la extensión
PostgreSQL ha añadido dos nuevas funciones:pg_escape_literal(), aplica el mecanismo de escape a un contenido antes de insertarlo en la base de datos. Se recomienda el uso de esta nueva función en vez depg_escape_string().pg_escape_identifier(), aplica el mecanismo de escape a una cadena de texto que contiene el nombre de una tabla o de un campo de la base de datos y que va a ser utilizado en una consulta.
Nuevas funciones de la extensión gd
La librería GD utilizada por PHP se ha actualizado a la versión 2.1, lo que añade nuevas funcionalidades, corrige algunos errores y mejora el rendimiento global.
La nueva función
imageflip() voltea horizontal o verticalmente una imagen. El primer argumento es la imagen que se manipula y el segundo es una constante que define el tipo de volteo a realizar: horizontal (IMG_FLIP_HORIZONTAL), vertical (IMG_FLIP_VERTICAL) o los dos a la vez (IMG_FLIP_BOTH).$rutaImagen = 'foto.png'; $imagen = imagecreatefrompng($rutaImagen); // voltearla verticalmente imageflip($imagen, IMG_FLIP_VERTICAL); // mostrar la imagen en el navegador imagejpeg($imagen); imagedestroy($imagen);
Ahora también es posible redimensionar imágenes con la función
imagescale(). El primer argumento indica la imagen a redimensionar, el segundo argumento indica la nueva anchura en píxeles, el tercer argumento opcional indica la nueva altura en píxeles y el cuarto argumento opcional indica el tipo de escalado que se aplica:$imagen = imagecreatefrompng('foto.png'); // la nueva anchura de la imagen será 600 píxel // (la altura se calcula automáticamente para mantener las proporciones) imagescale($imagen, 600); // la nueva imagen será de 600 x 350 píxeles // (aunque eso suponga deformar la imagen original) imagescale($imagen, 600, 350); // el método empleado para redimensionar la imagen será // el escalado bicúbico, mucho más lento pero de más calidad // las constantes definidas son: // * IMG_NEAREST_NEIGHBOUR // * IMG_BILINEAR_FIXED // * IMG_BICUBIC // * IMG_BICUBIC_FIXED imagescale($imagen, 600, 350, IMG_BICUBIC);
Recortar imágenes es un requerimiento habitual en las aplicaciones web. La nueva función
imagecrop() simplifica al máximo esta tarea. Su primer argumento es la imagen a recortar y el segundo argumento es un array asociativo con las claves x, y, width y height que definen el área de corte:$imagen = imagecreatefrompng('foto.png'); imagecrop($imagen, array('x' => 0, 'y' => 0, 'width' => 100, 'height' => 200));
Además de la función
imagecrop() PHP 5.5 define una función relacionada llamada imagecropauto()para recortar las imágenes de forma automática. Su primer argumento es la imagen a recortar y el segundo argumento es alguna de las siguientes constantes:IMG_CROP_DEFAULT,IMG_CROP_TRANSPARENT,IMG_CROP_BLACK,IMG_CROP_WHITE y IMG_CROP_SIDES.$imagen = imagecreatefrompng('foto.png'); imagecrop($imagen, IMG_CROP_TRANSPARENT); imagecrop($imagen, IMG_CROP_SIDES);
Por último, se han añadido otras tres funciones menos importantes:
imageaffinematrixconcat(),imageaffinematrixget() y imagepalettetotruecolor(), que convierte una imagen con un número limitado de colores en una imagen de color verdadero.
Nuevas funciones de la extensión curl
La principal función añadida por la extensión
cURL es curl_file_create(), que permite crear fácilmente un objeto de tipo CURLFile para subir archivos con el método POST de HTTP. Su primer argumento es la ruta del archivo, el segundo argumento opcional es el tipo MIME del archivo y el tercer parámetro opcional es el nombre con el que se subirá el archivo:$ch = curl_init('http://librosweb.es/subir_archivo.php'); $archivoCurl = curl_file_create('foto.jpg','image/jpeg','otro_nombre'); curl_setopt($ch, CURLOPT_POST,1); curl_setopt($ch, CURLOPT_POSTFIELDS, array('otro_nombre' => $archivoCurl)); curl_exec($ch);
Si ejecutas el código del ejemplo anterior, el script que responda la URL
subir_archivo.php recibirá un archivo llamado otro_nombre, de tipo JPEG y que contiene la imagen del archivo foto.jpg.
Además de esta función, se han añadido dos funciones complementarias llamadas
curl_escape() ycurl_unescape(). La primera codifica una cadena de texto para que sea seguro incluirla como parte de una URL. La segunda hace el proceso inverso para recuperar el contenido original de una cadena de texto codificada como parte de una URL.
Por último, se han añadido otras funciones como
curl_pause(), que detiene o continúa la ejecución de las peticiones y curl_reset() que inicializa todas las opciones de la conexión a sus valores por defecto. Para ver el resto de funciones añadidas por cURL consulta el siguiente enlace: New cURL functions.
Nuevas funciones de la extensión socket
La extensión
Socket ha definido tres nuevas funciones: socket_sendmsg() para enviar un mensaje a través de un socket, socket_recvmsg() que es la función complementaria para leer los mensajes recibidos a través de un socket y socket_cmsg_space(), que calcula el tamaño que debería reservarse como buffer de mensajes.
Nuevas funciones de la extensión intl
La extensión
intl es con diferencia la que más funciones ha añadido en esta nueva versión de PHP. Además, en el momento de escribir este tutorial casi ninguna de esas funciones está documentada. Ver listado de nuevas funciones intl.Nuevas funciones para la línea de comandos
Si ejecutas scripts de PHP a través de la consola de comandos, ahora puedes establecer el nombre del proceso bajo el que se ejecuta PHP. Este nombre es el que luego aparece al listar los procesos del servidor con comandos como
top y ps. Establece el nombre del proceso PHP con la funcióncli_set_process_title() y obtén el nombre del proceso actual con la funcióncli_get_process_title().Nuevos argumentos para las funciones
Además de añadir nuevas funciones, PHP 5.5 cambia los argumentos de algunas de las funciones existentes.
La función
json_encode() ahora admite un tercer parámetro llamado $depth y que indica hasta qué nivel de profundidad (para los arrays) o hasta que nivel de recursividad (para los objetos) se tiene en cuenta para codificar el objeto o array.
Las funciones
set_error_handler() y set_exception_handler() ahora admiten el valor null como argumento. En ese caso, devuelven respectivamente el anterior handler para errores y excepciones.
Las funciones de la extensión
intl han recibido muchos cambios, que puedes consultar con detalle en el artículo Changed Functions
Por último, la función
preg_replace() ya no soporta el modificador /e. Utiliza en su lugar la funciónpreg_replace_callback().Cambios incompatibles con las versiones anteriores de PHP
Para que su funcionamiento sea más parecido al del lenguaje Perl, se ha modificado el comportamiento de las funciones
pack() y unpack().
La función
pack() ahora soporta el formato Z, que se comporta igual que el formato a disponible anteriormente.
La función
unpack() ha sufrido varios cambios:- Ahora soporta el formato
Zpara las cadenas rellenas con el carácterNULLy se comporta igual que el formatoa(elimina todos los bytesNULLsobrantes). - Si se utiliza el formato
a, se mantienen todos los bytesnullsobrantes - El formato
Aahora eliminar todos los espacios en blanco sobrantes.
El siguiente ejemplo muestra el código que debes utilizar en PHP 5.5 para mantener la retrocompatibilidad de los datos comprimidos con el formato
a:// código válido antes de PHP 5.5 $datos = unpack('a5', $datosComprimidos); // a partir de PHP 5.5 el comportamiento cambia if (version_compare(PHP_VERSION, '5.5.0-dev', '>=')) { $datos = unpack('Z5', $datosComprimidos); } else { $datos = unpack('a5', $datosComprimidos); }
Por otra parte, se han declarado obsoletas las siguientes cuatro funciones de la extensión
Mcrypt:mcrypt_cbc(), mcrypt_cfb(), mcrypt_ecb() y mcrypt_ofb().Funciones eliminadas
Por su poca utilidad práctica, PHP 5.5 ha eliminado las siguientes cuatro funciones cuyo resultado únicamente servía para mostrar el logotipo de PHP:
php_logo_guid(), php_egg_logo_guid(),php_real_logo_guid() y zend_logo_guid().




