如何在 php 中的被调用方法中获取调用方方法参数?

How to get caller method argument inside called method in php?

比方说,我有一个 class 这样的:

<?php

class ExampleClass {

    public function callerOne($arg1, $arg2) {
        return $this->calledMethod(function($arg1, $arg2) {
            // do something
        });
    }

    public function callerTwo($arg1) {
        return $this->calledMethod(function($arg1) {
            // do something
        });
    }

    protected function calledMethod(Closure $closure)
    {
        // How to access caller's arguments, like func_get_args()
        $args = get_caller_method_args();
        return call_user_func_array($closure, $args);
    }

}

在上面的示例中,方法 calledMethod 将传递的闭包包装在某些东西中,例如在 beginTransaction()endTransaction() 之间扭曲它,但我需要访问调用方方法参数。

我知道一个可能的解决方案是在将闭包传递给 calledMethod() 时使用 use 语句,但如果我想要的是可能的,那么看起来会容易得多。

如何在被调用方法中访问调用者的参数?这可能吗?

我不确定这对你的情况是否有帮助,但你可以创建 ReflectionFunction and use ReflectionFunction::invokeArgs,它调用函数并将其参数作为数组传递。

<?php

$closure = function () {
    echo 'Hello to: ' . implode(', ', func_get_args()) . PHP_EOL;
};

$reflection = new ReflectionFunction($closure);
// This will output: "Hello to: foo, bar, baz"
$reflection->invokeArgs(array('foo', 'bar', 'baz'));