2011-08-04 48 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)。一个更好的解决方案(如果可能在你的真实代码中)是将变量传递给其他函数。