我对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;
}
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的值确实发生了变化,我无法理解为什么。任何详细的解释将不胜感激。
答案 0 :(得分:1)
你非常接近。由于variable variables,$c
和$d
发生了变化。
所以在循环中:
foreach($arrOptionalParams as $key => $value) {
${$key} = $value;
}
当$key == 'c'
数组内部解析为$c = $value;
因为{$key}
解析为c
然后$c = $value
,其中$value == stood
从数组传递给函数
这个功能似乎有目的地令人困惑。更好的方法更明确:
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";
}