PHP получить статические методы - PullRequest
5 голосов
/ 28 ноября 2011

Я хочу вызвать метод класса с помощью переменной var (например, вот так):

$var = "read";
$params = array(...); //some parameter
if(/* MyClass has the static method $var */)
{
  echo MyClass::$var($params);
}
elseif (/* MyClass hat a non-static method $var */)
{
  $cl = new MyClass($params);
  echo $cl->$var();
}
else throw new Exception();

Я прочитал в руководстве по php, как получить функции-члены класса (get_class_methods).но я всегда получаю каждый член без информации, если он статический или нет.

как я могу определить контекст метода?

спасибо за вашу помощь

Ответы [ 2 ]

15 голосов
/ 28 ноября 2011

Используйте класс ReflectionClass:

On Codepad.org: http://codepad.org/VEi5erFw
<?php

class MyClass
{
  public function func1(){}
  public static function func2(){}
}

$reflection = new ReflectionClass('MyClass');
var_dump( $reflection->getMethods(ReflectionMethod::IS_STATIC) );

Это выведет все статические функции.

Или, если вы хотите определить, является ли данная функция статической, вы можете использовать класс ReflectionMethod:

На Codepad.org: http://codepad.org/2YXE7NJb

<?php

class MyClass
{
  public function func1(){}
  public static function func2(){}
}

$reflection = new ReflectionClass('MyClass');

$func1 = $reflection->getMethod('func1');
$func2 = $reflection->getMethod('func2');

var_dump($func1->isStatic());
var_dump($func2->isStatic());
4 голосов
/ 28 ноября 2011

Один из известных мне способов - использовать Отражение .В частности, можно использовать ReflectionClass::getMethods следующим образом:

$class = new ReflectionClass("MyClass");
$staticmethods = $class->getMethods(ReflectionMethod::IS_STATIC);
print_r($staticmethods);

Сложность этого состоит в том, что вам нужно включить отражение, чего по умолчанию нет.

...