PHP-将参数作为数组传递到函数中,而不必定义为参数

PHP-将参数作为数组传递到函数中,而不必定义为参数,php,function,function-parameter,Php,Function,Function Parameter,是否可以在每次使用函数时将变量(带有数组数据)传递到函数中,而不必将其用作参数 我的情况是,我已经为表单生成了UI元素。现在,如果我定义输入的名称,我会得到一个按设计工作的字段,但是每次我还必须传递两个变量 定义的功能: 理想情况下,我希望在函数中传递$game和$answer变量,以确定依赖于它们的内容。我使用的是CodeIgniter,$game变量在页面加载时传递给视图。只有在传递或定义了$game时,才能在函数中定义$answer变量 功能的当前使用情况: 功能的理想使用(使用更简单):

是否可以在每次使用函数时将变量(带有数组数据)传递到函数中,而不必将其用作参数

我的情况是,我已经为表单生成了UI元素。现在,如果我定义输入的名称,我会得到一个按设计工作的字段,但是每次我还必须传递两个变量

定义的功能: 理想情况下,我希望在函数中传递
$game
$answer
变量,以确定依赖于它们的内容。我使用的是CodeIgniter,
$game
变量在页面加载时传递给视图。只有在传递或定义了
$game
时,才能在函数中定义
$answer
变量

功能的当前使用情况: 功能的理想使用(使用更简单):
如果还有什么需要定义的,请告诉我,我不想显示所有代码,因为有将近100行代码。

为此使用闭包将是一个很好的选择,特别是“使用”构造

#!/usr/bin/env php 
<?php

function getDecision($name, $game, $answer) {
  echo "$name : $game : $answer \n";
}

function main() {

  $my_game = "my game";
  $my_answer = "my answer";


  $getDecisionCaller = function($name) use ($my_game, $my_answer) {
    getDecision($name, $my_game, $my_answer);
  };  

  // Don't really need the line below, can simply use: $getDecisionCaller('company 0');
  getDecision('company 0', $my_game, $my_answer);

  $getDecisionCaller('company 1');
  $getDecisionCaller('company 2');
}

main();

?>
在上面的代码中,我定义了getDecision($name,$game,$answer),它只打印发送的值。 然后,我定义了getDecisionCaller,它只接受$name作为参数,但使用$my_game、$my_answer的值

注意,“use”构造需要绑定变量,不能通过字符串设置值。它将给出错误-“Parse error:Parse error,应为
”和“”或
“variable(T_variable)”

你不能做下面的事

$getDecisionCaller = function($name) use ('a game', 'an answer') {
  getDecision($name, $my_game, $my_answer);
};

希望这会有所帮助:)

您可以使用全局变量来实现这一点。例如:

<?php

    $array = array();

    function test() {
        global $array;

        print_r($array);
    }

    function main() {
        test();
    }

    main();
?>


但是,应该避免使用。

如果您不提供$game,它如何知道它的价值?是否有默认值?
#!/usr/bin/env php 
<?php

function getDecision($name, $game, $answer) {
  echo "$name : $game : $answer \n";
}

function main() {

  $my_game = "my game";
  $my_answer = "my answer";


  $getDecisionCaller = function($name) use ($my_game, $my_answer) {
    getDecision($name, $my_game, $my_answer);
  };  

  // Don't really need the line below, can simply use: $getDecisionCaller('company 0');
  getDecision('company 0', $my_game, $my_answer);

  $getDecisionCaller('company 1');
  $getDecisionCaller('company 2');
}

main();

?>
company 0 : my game : my answer 
company 1 : my game : my answer 
company 2 : my game : my answer
$getDecisionCaller = function($name) use ('a game', 'an answer') {
  getDecision($name, $my_game, $my_answer);
};
<?php

    $array = array();

    function test() {
        global $array;

        print_r($array);
    }

    function main() {
        test();
    }

    main();
?>