2011-08-22 12 views
5

Kilka miesięcy temu przeczytałem o funkcji PHP, która jest wywoływana za każdym razem, gdy wywoływana jest metoda statyczna, podobnie do funkcji __construct, która jest wywoływana, gdy instancja klasy jest instancjonowana. Jednak nie mogę znaleźć funkcji, która dba o tę funkcjonalność w PHP. Czy istnieje taka funkcja?Konstruktor alternatywny dla metod statycznych w PHP

Odpowiedz

6

Możesz grać z __callStatic() i zrobić coś takiego:

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); 

przy użyciu tego kodu żadnej metody, która jest poprzedzona „_” uruchomi konstruktora statycznego „” pierwszy. To tylko podstawowy przykład, ale można użyć __callStatic, ale działa to lepiej dla ciebie.

Powodzenia!

+0

Nie tego oczekiwałem, ale uważam, że jest najbliższy temu, czego szukam. Dzięki, Adi. –

+0

Nie ma problemu, mam nadzieję, że pomogłem. –

3

__callStatic() jest wywoływana za każdym razem, gdy wywołujesz nieistniejącą statyczną metodę klasy.

+0

Natknąłem się na tę metodę w podręczniku PHP jakiś czas temu, ale, jak wspomniałeś, jest ona wywoływana tylko wtedy, gdy wywoływana jest nieistniejąca metoda statyczna. –

Powiązane problemy