PHP: class A { function a($a) { var_dump($b /* или $c или $d и так далее */); // test } } (new A()->a(...array_values(['a' => 'test']))); Теперь код для вопроса, он примерный, просто отображает то, чего хочется добиться, так что не ржать сильно PHP: class A { function a($a) { var_dump($a /* строго по имени параметра */); // test } } (new A()->a(extract(['a' => 'test']))); Можно ли реализовать такой extract(), чтобы обращаться к ключам массива строго по имени параметра?
в параметр по имени ключа, вот как распакован массив, так и юзать распакованные переменные, но распаковку делать не в методе, а чтобы в параметрах уже были распакованные
https://www.php.net/manual/ru/function.parse-ini-string.php https://www.php.net/manual/ru/function.parse-str
короче у меня роутер создаёт объект и вызывает метод, в метод передаются параметры, я хочу в методах контроллеров просто использовать переменные, ДАЖЕ НАВЕРНОЕ не из параметров, а чтобы они роутером были распакованы и я имел доступ к ним в методах контроллеров по именам параметров --- Добавлено --- @Drunkenmunky короче вот так может будет понятно PHP: // в роутере делаем extract(['a' => 'test']); $cObj->$action();// вызвали метод test из роутера // $cObj->test(); function test() { // дебажим распакованную переменную var_dump($a); // ДОЛЖНО БЫТЬ - test } вот как я хотел бы
так у меня вызван метод переменной, мне массив, распакованный перед вызовом метода, нужно видеть ВНУТРИ ВЫЗВАННОГО МЕТОДА, в виде переменных, которые получены этой распаковкой
я сделал PHP: call_user_func_array([$cObj, $action /* test() */], ['a' => 555]); function test($a) { var_dump($a); // 555 } function test($b) { var_dump($b); // Unknown named parameter $a } то есть мы обратились к ключу массива именно по имени параметра
@Drunkenmunky а вообще я затупил (new A()->a(...array_values(['a'=>'test']))); меняем на (new A()->a(...['a'=>'test'])); и будет то же что call_user_func_array([new A(), 'a'],['a'=>'test']); я ключи убрал же из массива (array_values) и втыкаю, как к ним обратиться