PHP 获取静态方法

标签 php reflection class-method

我想通过 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)。但我总是让每个成员都没有信息,无论它是否是静态的。

我如何确定方法的上下文?

谢谢你的帮助

最佳答案

使用类 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());

关于PHP 获取静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8299886/

相关文章:

javascript - jquery SlideToggle 打开所有 div,而不仅仅是所需的 div

php - 使用PDO显示当前用户名

java - 检测传递给构造函数的给定对象中的当前注释

.net - 合并程序集并使用 internal 关键字

ruby - 在 Ruby 中调用 protected 父类(super class)类方法

ruby-on-rails - 最好附加一个简单的函数作为类方法或模块?

file-upload - 当上传大于 POST_MAX_SIZE 时,PHP $_POST/$_FILES 为空

php - 使用 PHP 改进我的 CSS

java - 检查一个类对象是否是Java中另一个类对象的子类

ruby - (在 Ruby 中)允许混合类方法访问类常量