2015-10-20 54 views
-4
<?php 
function myfunction($a, $b = true) 
{ 
if($a && !$b) { 
echo "Hello, World!\n"; 
} 
} 
$s = array(0 => "my", 
1 => "call", 
2 => '$function', 
3 => ' ', 
4 => "function", 
5 => '$a', 
6 => '$b', 
7 => 'a', 
8 => 'b', 
9 => ''); 
$a = true; 
$b = false; 
/* Group A */ 
$name = $s[?].$s[?].$s[?].$s[?].$s[?].$s[?]; 
/* Group B */ 
$name(${$s[?]}, ${$s[?]}); 
?> 

问题如下:每个?在上面的脚本中表示一个针对$ s数组的整数索引。为了 显示你好,世界!字符串执行时,必须丢失的整数索引是什么?PHP函数和数组

这不是一个家庭作业/考试,它来自我正在阅读的电子书,但我似乎无法理解到底发生了什么。

给出的答案如下:

1: Group A: 4,3,0,4,9,9 Group B: 7,8 
2: Group A: 1,3,0,4,9,9 Group B: 7,6 
3: Group A: 1,3,2,3,0,4 Group B: 5,8 
4: Group A: 0,4,9,9,9,9 Group B: 7,8 
5: Group A: 4,3,0,4,9,9 Group B: 7,8 

正确答案是4,但我不明白例子中的代码发生。我已经了解到PHP中的函数可以动态调用,但我不明白在这个例子中它是如何完成的。如果有人能够一步一步向我解释我们如何得到这个例子的答案,我将不胜感激。

+0

呵呵'ZCE'测试! –

+2

既然你知道正确的答案,你可以填写它并手动评估代码/在你的脑海中。你尝试过吗?有什么不清楚的呢? – deceze

+0

@u_mulder投票结果太宽 –

回答

4
$name = $s[?].$s[?].$s[?].$s[?].$s[?].$s[?]; 

被填充到正确的数字:

$name = $s[0].$s[4].$s[9].$s[9].$s[9].$s[9]; 

取代他们的是价值观,这简化为:

$name = 'my'.'function'.''.''.''.''; 

这仅仅是:

$name = 'myfunction'; 

现在:

$name(${$s[?]}, ${$s[?]}); 

已填充数字:

$name(${$s[7]}, ${$s[8]}); 

的价值观所取代:

$name(${'a'}, ${'b'}); 

可降低到:

$name($a, $b); 

的价值观所取代:

$name(true, false); 

而且由于$name'myfunction',这简化为:

myfunction(true, false); 
+0

非常感谢,非常感谢帮助,现在我完全理解了答案。 – user5204184