func_get_args检测上下文

时间:2012-11-12 22:51:08

标签: php function

我有一个脚本,它接受不同数量的参数。

我想使用func_get_args对所述参数执行操作。如果我有这样一个函数:

function Something() {
   foreach(func_get_args($this) as $functions) {
       // Do something
   }

   // Return..
}

我希望能够在例如另一个添加/保存条目的功能中调用此函数。添加/保存功能将包含参数'title','description'等。

我基本上想知道是否有办法检测函数调用的上下文。我可以将一些东西传递给func_get_args,让它知道它在某个函数中被调用吗?所以,如果我这样做:

function Save($title, $desc) {
$vars = $this->Something();
}

我希望$vars在修改后包含$title$desc

2 个答案:

答案 0 :(得分:0)

您的函数没有参数,因此无法通过func_get_args获取它。

您可以通过检查backtrace并提取args部分来获取它。

答案 1 :(得分:0)

想出来..不漂亮,但它做了我想要的。

private function Handle($Function, $Values) {
        $Method = new ReflectionMethod($this, $Function);
        $Result = array();
        $Inc = 0;

        foreach($Method->getParameters() as $Args) {
            $Result[$Args->getName()] = $this->DB->real_escape_string($Values[$Inc]);
            $Inc++;
        }

        return $Result;
}

function Test($a, $b, $c) {
    $Vars = $this->Handle(__FUNCTION__, func_get_args());
    print_r($Vars);
}

print_r(Test(1, 2, 3));

Array
(
    [a] => 1
    [b] => 2
    [c] => 3
)

我有另一种方法可以做到这一点但是必须使用$Vars[0], $Vars[1]等来访问数组,我想这样做我可以使用$Vars['something'], $Vars['something_else']