Допустим, у меня есть такой класс:
<?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()
, но мне нужно получить доступ к аргументам метода вызывающего.
Я знаю, что возможное решение будет использовать use
заявление при прохождении закрытия calledMethod()
, но было бы намного легче на глаз, если бы то, что я хотел, возможно.
Как я могу получить доступ к аргументам вызывающего, внутри вызываемого метода? Это вообще возможно?
Я не уверен, поможет ли это в вашем случае, но вы можете создать ReflectionFunction и использовать ReflectionFunction :: аргументов вызова, который вызывает функцию и передает ее аргументы в виде массива.
<?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'));
Других решений пока нет …