2011-08-22 15 views
5

Alcuni mesi fa, ho letto su una funzione PHP che viene chiamata ogni volta che viene chiamato un metodo statico, simile alla funzione __construct che viene chiamata quando un'istanza di classe viene creata un'istanza. Tuttavia, non riesco a trovare quale funzione si prenda cura di questa funzionalità in PHP. Esiste una tale funzione?Alternatore costruttore per metodi statici in PHP

risposta

6

Si può giocare con __callStatic() e fare qualcosa del genere:

class testObj { 
    public function __construct() { 

    } 

    public static function __callStatic($name, $arguments) { 
    $name = substr($name, 1); 

    if(method_exists("testObj", $name)) { 
     echo "Calling static method '$name'<br/>"; 

     /** 
     * You can write here any code you want to be run 
     * before a static method is called 
     */ 

     call_user_func_array(array("testObj", $name), $arguments); 
    } 
    } 

    static public function test($n) { 
    echo "n * n = " . ($n * $n); 
    } 
} 

/** 
* This will go through the static 'constructor' and then call the method 
*/ 
testObj::_test(20); 

/** 
* This will go directly to the method 
*/ 
testObj::test(20); 

Utilizzando questo codice qualsiasi metodo che è preceduta da '_' verrà eseguito il 'costruttore' statica prima. Questo è solo un esempio di base, ma è possibile utilizzare __callStatic tuttavia funziona meglio per voi.

Buona fortuna!

+0

Non è quello che speravo, ma penso che sia il più vicino a quello che sto cercando. Grazie, Adi. –

+0

Nessun problema, spero di averlo aiutato. –

3

Il __callStatic() viene chiamato ogni volta che chiami il metodo statico non esistente di una classe.

+0

Un po 'di tempo fa mi sono imbattuto in questo metodo nel manuale PHP, ma, come dici tu, viene chiamato solo quando viene chiamato un metodo statico inesistente. –