2008-10-11 13 views
24

En el equipo con el que trabajo, tenemos una base de código antigua que utiliza las funciones ibase_ * de PHP en todo el código para comunicarse con la base de datos. Creamos un contenedor que haría algo más aparte de llamar a la función original e hice una búsqueda masiva: reemplazar todo el código para asegurarme de que se usa ese contenedor.¿Cómo descartar una función en PHP?

Ahora, ¿cómo evitamos el uso de funciones ibase_ * en el futuro?

Preferiblemente, me gustaría tenerlos disponibles, pero haga que arroje un AVISO o ADVERTENCIA cuando se usa.

Se prefiere una solución en PHP puro (sin necesidad de compilar una versión personalizada de PHP).

Respuesta

12

Si entiendo correcto, ¿desea activar un error cuando se utiliza una función de PHP incorporada? En ese caso, eche un vistazo a la función Override Function.

+0

Gracias, siguiendo el enlace que publicó, encontré exactamente lo que necesitaba, aquí: http://no.php.net/manual/en/function.override-function.php#50821 –

+0

Tenga en cuenta que esto es parte de la extensión APD (depurador). No debe usar esto en su entorno de producción, e incluso en su máquina de prueba, probablemente entrará en conflicto con otros depuradores (como Xdebug), por lo que es posible que no desee utilizarlo. – troelskn

+0

@troelskn: tienes razón. ¿Alguna otra idea? –

6

No he comprobado por mí mismo, pero encontró esto en mis marcadores: http://wiki.php.net/rfc/e-user-deprecated-warning

EDIT: Bueno esto no funciona todavía - por lo que en lugar de E_USER_DEPRECATED sólo tiene que utilizar algo así como E_USER_NOTICE:

<?php 
class Foo 
{ 
    public function __construct() 
    { 
     trigger_error('Use Bar instead', E_USER_NOTICE); 
    } 
} 

$foo = new Foo() 

esto va a terminar con esto:

Notice: Use Bar instead in /home/unexist/projects/ingame/svn/foo.php on line 6 
36

trigger_error()

function my_deprecated_function() { 
    trigger_error("Deprecated function called.", E_USER_NOTICE); 
    // do stuff. 
} 
+1

No es mi función, pero PHP está integrada en funciones ibase_ * como ibase_query, por ejemplo. –

+9

Puede considerar el uso de [E_USER_DEPRECATED] (http://php.net/manual/en/migration53.deprecated.php) para PHP 5.3.xy versiones posteriores – emont01

2

Si sus funciones son parte de una clase, puede usar trigger_error en el constructor para advertir de la desaprobación.

Alternativamente, si las funciones están en un solo archivo, la activación de una advertencia de desactivación en la parte superior del archivo mostraría el error cada vez que el archivo se incluya en otra parte.

Finalmente, puede arrojar el error en la primera línea de cualquiera de las funciones en desuso.

+0

No es mi función, pero PHP está construida en funciones ibase_ * como ibase_query por ejemplo. –

1

En lugar de generar una advertencia de tiempo de ejecución sobre el uso, podría considerar escribir una secuencia de comandos, que puede escanear su base de código para el uso de esta función y luego generar un informe de código ofensivo. De vez en cuando, hazlo pasar.

Si utiliza un sistema de control de versiones, puede establecer el script como un commit-hook. Probablemente recomendaría un anzuelo, que simplemente envía un correo electrónico, cuando un guión, que contiene funciones desaprobadas, está registrado, pero si realmente quieres aplicarlo, puedes tener un pre-gancho para evitar que alguien lo marque.

+1

Se llama GREP – Malfist

8

En general, puede marcar un método como obsoleto para dar a los usuarios advertencias sobre el código que no funcionará en versiones futuras. Creo que la mejor manera es usar trigger_error junto con algunos phpdoc.

/** 
* @deprecated 
* 
* @return $this 
*/ 
public function oldMethod() 
{ 
    trigger_error('Method ' . __METHOD__ . ' is deprecated', E_USER_DEPRECATED); 

    return $this; 
} 

El phpdoc @deprecated es importante porque muchos entornos de desarrollo como PHPStorm lo reconocen y atacan el nombre del método si intenta usarlo, por lo que notan que es obsoleto antes de que realmente ejecuta el código.

Se verá más o menos así:

jetbrains deprecated strikethrough

Al lado de la phpdoc puede asegurarse de que el usuario recibe una advertencia al desencadenar el error en tiempo de ejecución correcta. Solo asegúrese de usar la constante correcta (es decir, E_USER_DEPRECATED).

E_DEPRECATED es utilizado internamente por PHP, por lo tanto, usted debe no usarlo. Más información here.

Cuestiones relacionadas