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

use*_*605 11 php variables setter

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

public function myFunction($paramJohn, $paramJoe, MyObject $paramMyObject)
{
     $this->paramJohn = $paramJohn;
     $this->paramJoe = $paramJoe;
     $this->paramMyObject = $paramMyObject;
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我可以这样做:

foreach (func_get_params() as $param)
   $this->${$param} = ${$param};
}
Run Code Online (Sandbox Code Playgroud)

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

nic*_*ckb 22

你可以使用Reflection:

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

由于您在课堂上使用它,您可以使用ReflectionMethod而不是ReflectionFunction:

$ref = new ReflectionMethod('ClassName', 'myFunction');
Run Code Online (Sandbox Code Playgroud)

这是一个工作示例:

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);
Run Code Online (Sandbox Code Playgroud)

以上var_dump() 打印的位置:

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


Dan*_*ssy 0

虽然这并非不可能,但通常最好使用其他方法。这是关于 SO 的类似问题的链接:

如何在 PHP 中获取字符串形式的变量名?

您可以做的是将所有参数传递到一个对象内部,而不是一一传递它们。我假设您正在执行与数据库相关的操作,您可能想阅读有关 ORM 的内容。