2013-07-03 10 views
9

逆の一種を探していますfunc_get_args()。私は、関数が定義されたときにどのようにパラメータが命名されたかを知りたいと思います。この理由は、私は、引数として渡された設定変数を使用する場合の方法を通じて自分自身を繰り返したくはありませんされていますPHPで関数のパラメータ名を取得するには?

public function myFunction($paramJohn, $paramJoe, MyObject $paramMyObject) 
{ 
    $this->paramJohn = $paramJohn; 
    $this->paramJoe = $paramJoe; 
    $this->paramMyObject = $paramMyObject; 
} 

は、理想的には私のような何かを行うことができます:

foreach (func_get_params() as $param) 
    $this->${$param} = ${$param}; 
} 

を、これはやり過ぎです、それは普通の愚かなアイデアですか、これを実現させるより良い方法がありますか?

答えて

1

これは不可能ではありませんが、通常は別の方法を使用する方が良いでしょう。ここではSOで同様の質問へのリンクです:

How to get a variable name as a string in PHP?

あなたは何ができるかは、代わりにそれらを一つずつを渡すと、オブジェクトの内部のすべてのパラメータを渡しています。私はあなたがデータベースに関してこれをやっていると仮定しています。あなたはORMについて読んでみたいかもしれません。

18

あなたはReflectionを使用することができます。

$ref = new ReflectionFunction('myFunction'); 
foreach($ref->getParameters() as $param) { 
    echo $param->name; 
} 

あなたはクラスでこれを使用しているので、あなたの代わりにReflectionFunctionReflectionMethodを使用することができます。

:ここ

$ref = new ReflectionMethod('ClassName', 'myFunction'); 

は実施例であります

class ClassName { 
    public function myFunction($paramJohn, $paramJoe, $paramMyObject) 
    { 
     $ref = new ReflectionMethod($this, 'myFunction'); 
     foreach($ref->getParameters() as $param) { 
      $name = $param->name; 
      $this->$name = $$name; 
     } 
    } 
} 

$o = new ClassName; 
$o->myFunction('John', 'Joe', new stdClass); 
var_dump($o); 

上記のvar_dump()prints:対応する値としてキーおよびパラメータ値としてパラメータ名を含む配列を作成

object(ClassName)#1 (3) { 
    ["paramJohn"]=> 
    string(4) "John" 
    ["paramJoe"]=> 
    string(3) "Joe" 
    ["paramMyObject"]=> 
    object(stdClass)#2 (0) { 
    } 
} 
0

コードスニペット:

$ref = new ReflectionFunction(__FUNCTION__); 

$functionParameters = []; 
foreach($ref->getParameters() as $key => $currentParameter) { 
    $functionParameters[$currentParameter->getName()] = func_get_arg($key); 
} 
関連する問題