jQueryみたいに省略可能な関数の塊クラスを作りたかったので
静的メソッドを利用した場合の挙動についていろいろテストしてみた。
PHPのバージョンは、5.3.1
まとめると、 * staticを指定してないメソッドは、静的メソッドの形式でも呼び出せる。 * インスタンスから静的メソッドを呼び出すこともできる * ただし、クラスを変数で動的に指定してメソッドを呼び出すような場合、指定どおりの書き方じゃないとうまく動かない。
<?php class Tips { // どの行の表示か見る用 protected static $i = 1; // static じゃないメソッド public function echo_test($var) { echo $var . ': test '.self::$i++.'<br>'; } // static なメソッド public static function echo_test_static($var) { echo $var . ': test '.self::$i++.'<br>'; } protected $l = 0; public function echo_test_use_this($var) { echo $var . ': test '.self::$i.'<br>'; $this->l++; } } $i = 0; Tips::echo_test($i++); // OK //Tips->echo_test($i++); // エラー $F = new Tips(); $F::echo_test($i++); // OK $F::echo_test_static($i++); // OK //$F::echo_test_use_this($i++); // エラー $F->echo_test($i++); // OK $F->echo_test_static($i++); // OK $F->echo_test_use_this($i++); // OK $C = 'Tips'; $C::echo_test($i++); // OK $C::echo_test_static($i++); // OK //$C::echo_test_static_use_this($i++); // エラー //$C->echo_test(); // エラー //$C->echo_test_static($i++); // エラー //$C->echo_test_static_use_this($i++); // エラー $A = 'F'; $$A->echo_test($i++); // OK $$A->echo_test_static($i++); // OK $$A->echo_test_use_this($i++); // OK //$$A::echo_test(); // エラー //$$A::echo_test_static(); // エラー //$$A::echo_test_use_this($i++); // OK ?>