2015-10-20 57 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