帮助分析代码执行(PHP)
我对php比较陌生,在理解以下代码的输出时遇到困难:帮助分析代码执行(PHP),php,associative-array,Php,Associative Array,我对php比较陌生,在理解以下代码的输出时遇到困难: function test_params($a, $b, $arrOptionalParams = array()) { $c = 'sat'; // default value for c $d = 'mat'; // default value for d foreach($arrOptionalParams as $key => $value) { ${$key} = $value;
function test_params($a, $b, $arrOptionalParams = array()) {
$c = 'sat'; // default value for c
$d = 'mat'; // default value for d
foreach($arrOptionalParams as $key => $value) {
${$key} = $value;
}
echo "$a $b $c on the $d";
}
test_params('The', 'dog', array('c' => 'stood', 'd' => 'donkey'));
这就产生了:
狗站在驴子上
这是我的方法,也是我通过手动执行代码所掌握的:
$a = 'The'
$b = 'dog'
arrOptionalParams['c']="stood"
arrOptionalParams['d']="donkey"
$c='sat'
$d='mat'
loop:
${$key}=value;
1st loop:
${$c}="stood"
$sat="stood"
2nd loop:
${$d}="donkey"
$mat="donkey"
echo "$a $b $c on the $d"
The dog sat on the mat
c和d的值确实会改变,我不明白为什么。任何详细的解释都将不胜感激。您非常接近$c和d美元因以下原因发生变化
所以在循环中:
foreach($arrOptionalParams as $key => $value) {
${$key} = $value;
}
当$key='c'时,数组内部解析为$c=$value
因为{$key}解析为c,所以$c=$value,其中$value==来自传递给函数的数组
这个函数似乎故意混淆。更好的方法将更加明确:
function test_params($a, $b, $arrOptionalParams = array()) {
$defaultParams = [
'c' => 'sat',
'd' => 'mat'
];
$params = array_merge($defaultParams, $arrOptionalParams);
foreach($params as $key => $value) {
$key = $value;
}
echo "$a $b $c on the $d";
}
请注意$$key=$value;也行。