如何在PHP中获取函数的参数名?

vs3odd8k  于 2022-11-21  发布在  PHP
关注(0)|答案(4)|浏览(189)

我在寻找一种反向的func_get_args()。我想知道在定义函数时参数是如何命名的。这样做的原因是我不想在使用通过方法作为参数传递的设置变量时重复我自己:

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

这是一个矫枉过正,是一个简单的愚蠢的想法,还是有一个更好的方法来实现这一点?

l7wslrjt

l7wslrjt1#

您可以使用Reflection

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

因为你在一个类中使用这个函数,所以你可以用ReflectionMethod代替ReflectionFunction

$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) {
  }
}
3zwtqj6y

3zwtqj6y2#

建立数组的程式码片段,该数组包含做为索引键的参数名称和做为Map值的参数值:

$ref = new ReflectionFunction(__FUNCTION__);

$functionParameters = [];
foreach($ref->getParameters() as $key => $currentParameter) {
    $functionParameters[$currentParameter->getName()] = func_get_arg($key);
}
p3rjfoxz

p3rjfoxz3#

虽然这不是不可能做到的,但通常使用另一种方法会更好。下面是一个关于SO的类似问题的链接:
How to get a variable name as a string in PHP?
你可以做的是在一个对象内传递所有的参数,而不是一个一个地传递它们。我假设你是在数据库中这样做的,你可能想读一下ORM。

nxagd54h

nxagd54h4#

get_defined_vars将为您提供参数名称及其值,因此您可以

$params = get_defined_vars();
foreach ($params as $var=>$val) {
   $this->${var} = $val;
}

相关问题