Domanda

Nel team con cui lavoro, abbiamo una vecchia base di codice che utilizza le funzioni ibase_ * di PHP in tutto il codice per comunicare con il database. Abbiamo creato un wrapper che farebbe qualcos'altro oltre a chiamare semplicemente la funzione originale e ho fatto una ricerca di massa in sostituzione nell'intero codice per assicurarmi che fosse usato invece wrapper.

Ora, come possiamo impedire l'uso delle funzioni ibase_ * in futuro?

Preferibilmente, vorrei averli ancora disponibili, ma emetti un AVVISO o un AVVISO quando viene utilizzato.

È preferibile una soluzione in PHP puro (che non necessita di compilare una versione personalizzata di PHP).

È stato utile?

Soluzione

Se ho capito bene, vuoi innescare un errore quando viene utilizzata una funzione PHP integrata? In tal caso, dai un'occhiata alla funzione Override Function .

Altri suggerimenti

trigger_error ()

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

In generale puoi contrassegnare un metodo come deprecato per dare agli utenti avvisi sul codice che non funzionerà nelle versioni future. Penso che il modo migliore sia usare trigger_error insieme ad alcuni phpdoc .

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

    return $this;
}

Il @deprecated phpdoc è importante perché molti IDE come PHPStorm riconoscono e colpisci il nome del metodo se provi a usarlo, quindi noti che è deprecato prima di eseguire effettivamente il tuo codice.

Apparirà più o meno così:

 jetbrains deprecato barrato

Oltre a phpdoc puoi assicurarti che l'utente riceva un avviso innescando l'errore corretto in fase di esecuzione. Assicurati solo di usare la costante giusta (ad es. E_USER_DEPRECATED ).

E_DEPRECATED viene invece utilizzato internamente da PHP, pertanto non dovresti non utilizzarlo. Maggiori informazioni qui .

Non l'ho verificato da solo, ma l'ho trovato nei miei segnalibri: http://wiki.php.net/rfc/e-user-deprecated-warning

Modifica: Okay non funziona ancora, quindi invece di E_USER_DEPRECATED usa solo qualcosa come E_USER_NOTICE:

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

$foo = new Foo()

Questo finirà con questo:

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

Se le tue funzioni fanno parte di una classe, puoi utilizzare trigger_error nel costruttore per avvisare della deprecazione.

In alternativa, se le funzioni si trovano in un singolo file, l'attivazione di un avviso di deprecazione nella parte superiore del file mostrerebbe l'errore ogni volta che il file è incluso altrove.

Infine, potresti lanciare l'errore sulla prima riga di una qualsiasi delle funzioni deprecate.

Invece di generare un avviso di runtime sull'utilizzo, potresti prendere in considerazione la scrittura di uno script, in grado di scansionare la tua base di codice per l'utilizzo di questa funzione, quindi generare un rapporto di codice offensivo. Di tanto in tanto, eseguilo.

Se si utilizza un sistema di controllo versione, è possibile impostare lo script come commit-hook. Probabilmente consiglierei un post-hook, che invia semplicemente un'e-mail, quando viene registrato uno script, contenente funzioni deprecate, ma se si desidera davvero applicarlo, è possibile che un pre-hook impedisca completamente a chiunque di eseguirne il check-in .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top