Gestionando código obsoleto con excepciones de PHP

Recientemente he comenzado a utilizar cada vez más la gestión de excepciones en PHP, lo que (al menos en teoría) permite escribir un código sencillo y fácil de mantener.

En un proyecto reciente, uno de los desafíos más importantes consistía en actualizar una base de código bastante antigua, en la que abundan ejemplos de funciones que, simplemente, deben dejar de existir. Dado que es un proyecto considerablemente grande y complejo, quise experimentar con un método que me permitiera registrar dónde se utilizan esas funciones para analizar cuidadosamente su reemplazo.

De este modo, el método propuesto se compone de tres partes: una clase para la creación de Excepciones; un manejador de excepciones y finalmente la reescritura de las funciones obsoletas para utilizar este método.

La clase para la creación de este tipo de excepciones es bastante básica, pero cumple con lo necesario:

Extiende la clase base de excepciones con pocas modificaciones:

  • El constructor recibe dos parámetros: el primer parámetro es el nombre de la función (que puede ser pasado como __FUNCTION__ para mayor facilidad) y el segundo es una propuesta para reemplazar la función original
  • Sobreescribo el método __toString() para generar un mensaje de error automáticamente

En segundo lugar, el manejador de excepciones default:

Adaptado para funcionar en el entorno de WordPress: si está activa la constante para permitir el registro de errores, va a escribir el error en el log llamando al método __toString() de la excepción junto con el stack trace para ubicar desde dónde se invoca a la función.

Finalmente, toca reescribir la función obsoleta:

En general, la idea es crear un bloque try...catch donde se genere la excepción y se ejecute el código obsoleto en el catch.

Un poco más complejo que simplemente buscar dónde se usa la función, pero mucho más útil para entender el funcionamiento del sistema.