Migración a PHp 5.3: primeras experiencias
10-07-2009
Luis Artola
Clasificado como:
PHP ,
WEBDEV ,
php 5.3, php migracion
Por razones que no vienen al caso, me he visto obligado a migrar mi primera aplicación a PHP 5.3, cosa que jamás hubiera hecho si no hubiera encontrado otra salida dado que PHP 5.3 ha salido hace una semana nada más. Hay algunas cosas que son relativamente fáciles de migrar pero en otras, si no hubiera tenido la suerte que he tenido, todavía creo que andaría buceando en el código en busca del fallo.
Empecemos por las fáciles:
- __toString ahora no acepta parámetros. Y yo usaba una librería opensource que sí tenía toString con parámetros. La solución ha sido parchearla quitando los parámetros y utilizando func_get_args.
- La función split está deprecated. Gracias a dios, explode hace exactamente lo mismo.
- Necesitarás utilizar date_default_timezone_set(‘Europe/Madrid’), o tus funciones mktime y date darán muchísimos warnings. También te recomiendan utilizar las nuevas clases relacionadas con Date/Time.
- Además, ahora si al final de un script y tras el símbolo de cierre (?>) existen espacios vacíos, ya no te dejará hacer un header(“location:”) porque te dirá que “headers already sent“. Esto hasta ahora sólo pasaba si tenías caracteres vacíos antes del comienzo de script (<?).
- PHP ha mejorado los errores que detecta. Ahora si hay caracteres estraños en tu archivo de texto, te dará un warning. Si tienes algo de código que copy/paste-aste en su momento, puede que ahora te salgan fallos que antes no salían.
Respecto a errores no tan evidentes:
- ereg() y sus variantes ya no existen. Si, como yo, la utilizabas para casi todo, tendrás que migrar a preg_match y sus variantes. “preg” funciona con las expresiones regulares de PERL, que no son iguales a las de PHP. Con lo que aquí toca ponerte a cambiar expresiones regulares. Yo no sabía que existía una manera bastante fácil de hacerlas compatibles… aún y todo habrá que ir cambiando una a una.
- Además, los deprecated dan su propio error E_DEPRECATED, que equivale básicamente a un fatal error, con lo que el script no seguirá ejecutándose.
Pero lo que me ha llegado al alma es que el módulo de MSSQL no interprete igual las fechas. Mi caso es raro. Casi ninguno tendréis una aplicación de PHP que funcione contra un SQLSERVER y que se encuentre sobre un Mac OS X Leopard en un ordenador PowerPC. Os aseguro que os costará encontrarán una configuración tan rara. El caso es que hasta ahora SQLSERVER traducía las fechas tipo ’2009-12-09′ al idioma en el que estuviera configurado. Pero ahora no lo hace. Así que si tu formato de fecha está localizado en España, tendrás que poner tods las fechas como ’09-12-2009′. Gracias a un buen diseño orientado a objetos (y a mucha suerte), cambiar el formato de fecha sólo ha sido ir a un método e invertirlo.
Para hacer la migración me he basado en: http://techportal.ibuildings.com/2009/06/30/migrating-to-php-5-3/. y http://es2.php.net/migration53.
- Vale la pena atender a los siguientes aspectos de PHP 5.3:
- nuevas clases: http://es2.php.net/manual/en/migration53.classes.php
- chequear si un objeto es de una clase ha vuelto (undeprecated): http://es2.php.net/manual/en/function.is-a.php
- ojo a las nuevas funciones como array_replace o todas las de date/time: http://es2.php.net/manual/en/migration53.functions.php
- soporte para phar y sqlite3: http://es2.php.net/manual/en/migration53.new-extensions.php
Os aconsejo valorar muy mucho el migrar vuestras aplicaciones a PHP 5.3. No es nada sencillo y hace falta bastante coraje. Imagino que, con el tiempo, aparecerán más guías y ayudas que permitirán hacer menos dolorosa la migración.
Espero que éste artículo os ayude un poco…
[...] Migrar a php 5.3 Ya podemos encontrar por internet las primeras experiencias de los usuarios [...]
[...] Migración a PHp 5.3: primeras experiencias. vía: programania [...]
split y explode son similares pero no lo mismo, split acepta expresiones regulares
Bueno. Si querés expresiones regulares tenés preg_split(). Me parece mejor alternativa.
Muchas gracias me sirvio