How to get function's parameters names in PHP?

前端 未结 3 1880
情话喂你
情话喂你 2021-02-07 18:28

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\

相关标签:
3条回答
  • 2021-02-07 19:08

    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) {
      }
    }
    
    0 讨论(0)
  • 2021-02-07 19:29

    While it's not impossible to do it, it's usually better to use another method. Here is a link to a similar question on SO :

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

    What you could do is pass all your parameters inside of an object, instead of passing them one by one. I'm assuming you are doing this in relation to databases, you might want to read about ORMs.

    0 讨论(0)
  • 2021-02-07 19:29

    Code snippet that creates an array containing parameter names as keys and parameter values as corresponding values:

    $ref = new ReflectionFunction(__FUNCTION__);
    
    $functionParameters = [];
    foreach($ref->getParameters() as $key => $currentParameter) {
        $functionParameters[$currentParameter->getName()] = func_get_arg($key);
    }
    
    0 讨论(0)
提交回复
热议问题