2011-08-22 8 views
5

数ヶ月前、静的メソッドが呼び出されるたびに呼び出されるPHP関数について読みました。これは、クラスのインスタンスがインスタンス化されたときに呼び出される__construct関数と同様です。しかし、私はPHPでこの機能をどのように機能させるのか分からないようです。そのような機能はありますか?PHPの静的メソッドのコンストラクタ代替

答えて

6

あなたは__callStatic()で再生すると、このような何か行うことができます:「_」によって先行された任意の方法は、最初の静的「コンストラクタ」を実行します。このコードを使用して

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

を。 これは単なる基本的な例ですが、__callStaticを使用すると効果的です。

幸運を祈る!

+0

それは私が望んだものではありませんが、私が探しているものに最も近いと思います。ありがとう、アディ。 –

+0

問題はありません、私は助けて願っています。 –

1

__callStatic()はあなたが参照しているメソッドですか? __callStatic(...

+0

私はこれが私が探している方法ではないことに恐れています。お返事をありがとうございます。 –

3

を呼び出し、未定義の静的メソッドを処理するための魔法の方法であると思われるので)、しかし、おそらく

http://www.php.net/manual/en/language.oop5.overloading.php#language.oop5.overloading.methods

ないと呼ばれている:私はちょうどPHPマニュアルでこれを見つけましたクラスの既存の静的メソッドを呼び出さないたびに呼び出されます。

+0

私はPHPマニュアルの中でこのメソッドを覚えましたが、あなたが言及したように、存在しない静的メソッドが呼び出されたときにだけ呼び出されます。 –