jueves, 6 de noviembre de 2008

Metodos inexistentes en PHP 6



Trabajando con el R&OS que es una libreria para generar pdf que ya les comentare, todo hiba de las mil maravillas con esta exelente libreria, sin embargo cuando quice incertar imagenes en el pdf ohhh sorpresa, me decia que habia un error en el metodo magic_quotes en donde???, me dije, si yo no tenia ningun metodo con ese nombre, siguiendo con mi lectura del error vi que se originaba en un archivo de la libreria R&OS pues bien hice lo que todo buen programador haria, me fui de inmediato al archivo eh hice un poderosicimo ctrl+f (depende del idioma del programa :P) para localizar donde se creaba dicho metodo, lo unico que pude localizar fueron multiples llamadas al mismo, pero del metodo ni sus luces asi que me quede con cara de ???????.

Despues ya mas sereno poniendome a investigar, encontre que algunos metodos que existian por defecto en PHP, en las versiones nuevas, mas especificamente de la 5 en adelante dejaron de existir, sin embargo aun muchas librerias no muy recientes hacen referencia a estos metodos, por lo que si usamos una version de php mayor a la 5 por logica tendremos errores cuandos estas librerias quieran referenciar a metodos inexistentes, pues bien ahora despues de todo este choro, la solucion propuesta es la siguiente:

if (!function_exists('get_magic_quotes')) {
function get_magic_quotes() {
return false;
}
}

Es decir checamos si no existe la funcion (si por casualidad se nos paso pondriamos peores las cosas :P) y si es el caso, entonces la creamos y simplemente retornamos un false, es decir no reconstruiremos toda la funcion original, pero podemos engañar a la libreria para que pase por alto esta funcion y me termine de hacer el proceso que deseabamos en un principio.

Quiero hacer notar que en el titulo no puse algo como error con libreria magic_quotes en php 6 :P, el por que es el siguiente, quiero que se entienda que este truco no solo aplica a ese metodo(magic_quotes), si no que lo podemos utilizar con cualquier metodo que anteriormente existia y que halla desaparecido en las ultimas versiones de php, esto con el fin de hacer nuestras librerias compatibles con estas ultimas versiones de php(la 5 y la 6).