2011-08-22 21 views
5

Birkaç ay önce, bir sınıf örneği başlatıldığında çağrılan __construct işlevine benzer bir statik yöntem çağrıldığında her zaman çağrılan bir PHP işlevi hakkında okudum. Ancak, PHP'de bu işlevin hangi işlevi yerine getirdiğini bulamıyorum. Böyle bir işlev var mı?PHP'de statik yöntemler için kurucu alternatifi

cevap

6

Böyle bir şey __callStatic() ile oynamak ve bunu yapabilirsiniz:

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

Bu kodu ilk '_' çalışacaktır statik 'yapıcı' öncesinde herhangi bir yöntem kullanma. Bu sadece temel bir örnektir, ancak __callStatic'u kullanabilirsiniz, ancak sizin için daha iyi çalışır.

İyi şanslar!

+0

Bu benim umduğum gibi değil, ama ben aradığımı en yakın olduğunu düşünüyorum. Sağol Adi. –

+0

Sorun değil, umarım yardımcı oldum. –

3

__callStatic() denir değil: Sadece PHP Manual bunu buldum Her zaman bir sınıfın varolan statik yöntemini çağırmazsınız.

+0

Bir süre önce PHP el kitabında bu yönteme rastladım, ama bahsettiğiniz gibi, sadece varolan statik bir yöntem çağrıldığında çağrılır. –

İlgili konular