2011-08-04 63 views
0

遇到一些麻煩這個..PHP - 反向調用函數?

<?php 

EG204_ExoSkel(); 

function EG204_ExoSkel() { 

    $to_be_end = 'Red'; 

    everything_loop(); 

} 

function everything_loop() { 

    echo $to_be_end; 

} 

?> 

上面的代碼不會回顯紅,所以我必須努力向後使用的功能。這可能嗎?

Everything函數中的所有內容都是區分不同的foreach循環。

+2

您所要做的就是了解函數和範圍以及如何將參數傳遞給函數。 http://php.net/manual/en/language.functions.php –

回答

4

試試這個(將其作爲一個參數)

<?php 
EG204_ExoSkel(); 

function EG204_ExoSkel() { 

    $to_be_end = 'Red'; 

    everything_loop($to_be_end); 

} 

function everything_loop($argument) { 

    echo $argument; 

} 
?> 

http://sandbox.phpcode.eu/g/3c1b6.php

+0

我建議你在'everything_loop'中重命名參數。否則,OP可能不理解這裏發生了什麼。 –

+0

採取建議不要使用globales,這似乎工作,因爲只有一個值需要發送。 – Suffice

+0

@FelixKling:完成,感謝您的建議 – genesis

0

嘗試引用$to_be_end作爲全球!

警告全球是不好的做法避免

<?php 

EG204_ExoSkel(); 

function EG204_ExoSkel() { 

global $to_be_end; 

$to_be_end = 'Red'; 

everything_loop(); 

} 

function everything_loop() { 

global $to_be_end; 

echo $to_be_end; 

} 

?> 
+0

嗯..我沒有想到,這可能會工作.. – Suffice

+1

@Suffice:不要使用globales。起初他們似乎是一個很好的解決方案,但事實並非如此。見維格的答案中的說明。而這段代碼不會順便工作。 –

+0

這被認爲是不好的做法,應儘可能避免......考慮推薦更好地理解功能範圍的其他答案。 – cmbuckley

0

你有scoping問題。 $to_be_end的聲明僅在EG204_ExoSkel函數中可用。

如果您想在該功能之外使用它,您應該使用global使其在全球範圍內可用。並且還在其他函數中添加全局(也用於使用全局變量)。造成這樣的:

EG204_ExoSkel(); 

function EG204_ExoSkel() { 
    global $to_be_end;  
    $to_be_end = 'Red'; 
    everything_loop(); 

} 

function everything_loop() { 
    global $to_be_end; 
    echo $to_be_end; 
} 

注意:使用全局考慮做法,往往使你的代碼的混亂(甚至引進很難找到的bug)。一個更好的解決方案(如果可能在你的真實代碼中)是將變量傳遞給其他函數。