У меня есть два класса:
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
Ладно, поскольку на 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) {
...
}
}
Все сделано. Удачи всем.
Других решений пока нет …