Передача переменной количества аргументов в функцию

У меня есть два класса:

class A {
function __construct() {
$B = new B;
$ArgumentReflection = new ReflectionMethod($B, "b");
$ArgumentArray = array();
foreach($ArgumentReflection->getParameters() as $ArgumentName) {
if(isset($Request[$ArgumentName->name])) {
$ArgumentArray[$ArgumentName->name] =  $_REQUEST[$ArgumentName->name];
}
}
}
}

class B {
function b($one, $two, $three) {
...
}
}

Это упрощенный пример. Идея заключается в том, что мне может потребоваться определить несколько функций в нескольких методах и вызывать их с разным количеством аргументов. Мне нужно найти решение о том, как вызвать метод и передать его, например, необходимо $_REQUEST переменные. Например, если у меня есть три функции в классе B, как это:

class B {
function a($seven, $six) {

}
function b($one, $two, $three) {

}
function c($zebra, $cat, $monkey) {

}
}

Если я пройду "a" в ReflectionMethod, я хочу функцию a называться так: $B->a($_REQUEST["seven"], $_REQUEST["six"]),
Если я пройду "b"тогда вот так: $B->b($_REQUEST["one"], $_REQUEST["two"], $_REQUEST["three"]); и так далее.

Заслуженно ... токен, доступный в php 5.6, не является решением,

Любой намек? Thanx

0

Решение

Ладно, поскольку на Reflections в PHP документировано не так много, я выкладываю свой собственный ответ, всем спасибо Джек для направления меня в правильном направлении.

ReflectionMethod наследуется аргументов вызова функция, через которую вы передаете массив аргументов. Итак, в конце, чтобы сделать то, что я имел в виду, я просто добавил одну строку после размещенного кода, и теперь это выглядит так:

class A {
function __construct() {
$B = new B;
$ArgumentReflection = new ReflectionMethod($B, "b");
$ArgumentArray = array();
foreach($ArgumentReflection->getParameters() as $ArgumentName) {
if(isset($Request[$ArgumentName->name])) {
$ArgumentArray[$ArgumentName->name] =  $_REQUEST[$ArgumentName->name];
}
}

$ArgumentReflection->invokeArgs($B, $ArgumentArray);

}
}

class B {
function b($one, $two, $three) {
...
}
}

Все сделано. Удачи всем.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]