2011-11-28 6 views
5

私は(このような)varでクラスメソッドを呼び出したいもらう:PHPは静的メソッド

$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)メンバー関数を取得するにはどのようにしてください。しかし、私は静的であるかどうかにかかわらず、情報がないすべてのメンバーを常に得ます。

どのようにしてメソッドのコンテキストを判断できますか?すべての静的関数この意志出力

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)); 

は、クラスReflectionClassを使用してあなたの助け

+1

インスタンス変数から静的メソッドを呼び出すことは、PHPでサポートされていることにも注意してください。 – JRL

答えて

13

をお願いします。

それとも、特定の関数が静的であるかどうかを確認したい場合は、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()); 
+0

これは基本的に私が言っていることですが、$ func1のhasMethodを使って例外を投げるかどうかを判断することができます。 –

+0

正確に何が必要なのでしょうか、ありがとう – 0xDEADBEEF

4

一つの方法は、の使用することですがReflection。具体的には、1のようなReflectionClass::getMethodsを使用します。

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

このことの難しさは、あなたはそれがデフォルトで有効になっていない反射を、持っている必要があるということです。

関連する問題