Альтернатива конструктора для статических методов в PHP - PullRequest
5 голосов
/ 22 августа 2011

Несколько месяцев назад я читал о функции PHP, которая вызывается каждый раз, когда вызывается статический метод, аналогично функции __construct, которая вызывается при создании экземпляра класса. Тем не менее, я не могу найти, какая функция заботится об этой функции в PHP. Есть ли такая функция?

Ответы [ 3 ]

7 голосов
/ 23 августа 2011

Вы можете играть с __ 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, однако он лучше работает для вас.

Удачи!

3 голосов
/ 22 августа 2011

__callStatic () вызывается каждый раз, когда вы вызываете несуществующий статический метод класса.

1 голос
/ 22 августа 2011

Может ли __callStatic () быть методом, на который вы ссылаетесь?Я только что нашел это в руководстве по PHP:

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

Возможно, нет, хотя, поскольку он кажется волшебным методом для обработки неопределенных вызовов статических методов ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...