PHP中静态方法的构造函数替代

时间:2011-08-22 10:55:24

标签: php static

几个月前,我读过每次调用静态方法时调用的PHP函数,类似于实例化类实例时调用的__construct函数。但是,我似乎无法在PHP中找到什么函数来处理这个功能。有这样的功能吗?

3 个答案:

答案 0 :(得分:7)

您可以使用__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,但它更适合您。

祝你好运!

答案 1 :(得分:3)

每次调用类的现有静态方法时都会调用__callStatic()。

答案 2 :(得分:1)

__callStatic()可以是你指的方法吗?我刚刚在PHP手册中找到了这个:

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

也许不是,因为它似乎是处理未定义的静态方法调用的神奇方法......