How to get function's parameters names in PHP?

php, setter, variables

Solution

You could use `Reflection`:

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

Since you're using this in a class, you can use `ReflectionMethod` instead of `ReflectionFunction`:

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

Here is a working example:

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

Where the above `var_dump()` prints:

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

Problem

I'm looking for a sort of reversed `func_get_args()`. I would like to find out how the parameters were named when function was defined. The reason for this is I don't want to repeat myself when using setting variables passed as arguments through a method: ``` public function myFunction($paramJohn, $paramJoe, MyObject $paramMyObject) { $this->paramJohn = $paramJohn; $this->paramJoe = $paramJoe; $this->paramMyObject = $paramMyObject; } ``` Ideally I could do something like: ``` foreach (func_get_params() as $param) $this->${$param} = ${$param}; } ``` Is this an overkill, is it a plain stupid idea, or is there a much better way to make this happen?

Original source

Related problems