PHP: Как распространить массив в качестве параметров функции - PullRequest
1 голос
/ 08 ноября 2019

Я пытаюсь использовать __callStatic, чтобы обернуть вызовы к разным статическим функциям в моем классе.

Эта текущая версия кода позволяет мне делать это с функциями, которые имеют параметр 0 или 1:

class test {

  public static function __callStatic($name, $args) {
    if (method_exists(__CLASS__, $name)) {
      echo "it does exist\n";
      return forward_static_call([__CLASS__, $name], $args[0]);
    } else {
      echo "it does not exist\n";
    }
  }

  private static function mfunc($param1, $param2) {
    echo "that's my func \n";
    echo "$param1\n";
    echo "$param2\n";
  }

}
test::notafunc("one", 'two');
test::mfunc("one", "two");

Однако это не удастся для mfunc, поскольку он имеет два параметра. Как я могу распространить различные аргументы, когда я вызываю функцию?

Я не могу использовать новый оператор распространения , потому что я заблокирован на PHP 7.2. Я также не могу изменить mfunc, потому что у меня слишком много методов для изменения в проекте.

1 Ответ

1 голос
/ 08 ноября 2019

Оператор распространения по-прежнему используется в PHP 7.2, на что вы указываете, что-то немного другое (речь идет о возможности использовать его как часть массива). Таким образом, вы можете использовать

return forward_static_call([__CLASS__, $name], ...$args);

Как более разборчивую версию ...

return static::{$name}(...$args);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...