关于PHP函数嵌套的变量作用域问题

玩玩灬而已 发布于 2012/10/31 21:38
阅读 1K+
收藏 2
PHP

请教一个PHP中函数嵌套的变量作用域问题。如下

<?php 
fucntion fun1() {
  $str = 'str';
  function fun2() {
    echo $str;
  } 
  fun2();
}
fun1();
?>

以上结果输出是空白的。

我先定义了函数fun1,在函数fun1中定义了一个字符串$str和另一个函数fun2,请问,我如何才能在函数fun2中引用到fun1里的变量$str?

求高手指点!感谢万分!

以下是问题补充:

@玩玩灬而已: 这里我是想把function当做一个过程来使用。由于我的实际源文件中fun2里需要使用到fun1中的变量数量较多,所以希望不要通过参数传递来实现。 如果对此问题有感兴趣的朋友,可以帮忙顶一下这个问题,希望能保证小弟解决此问题!谢谢! (2012/10/31 23:07)
加载中
0
大大
大大
<?php 
fucntion fun1() {
  $str = 'str';
  function fun2() use ($str) {
    echo $str;
  } 
  fun2();
}
fun1();
?>
玩玩灬而已
玩玩灬而已
刚才看了网上一些示例,这个好像是php5.3+的写法。我现在使用的环境是5.2+,请问还有其他方法可以解决吗?
leo108
leo108
回复 @玩玩灬而已 : 唉,手误打错function你都没看出来么
玩玩灬而已
玩玩灬而已
我测试的结果是语法错误。 Parse error: syntax error, unexpected T_STRING in 'file'on line 2
0
极品渣子
极品渣子
global $str
玩玩灬而已
玩玩灬而已
我试了global,好像只能获得全局的,也就是在fun1外部的变量,不能取得fun1内的变量
0
傅小黑
傅小黑

5.3下面用闭包这么些可以

function func1{
    $str = 'string';
    $func2 = function() use ($str){
        echo $str;
    }
    $func2();
}
func1();

玩玩灬而已
玩玩灬而已
回复 @傅小黑 : 这里我是想把function当做一个过程来使用。由于我的实际源文件中fun2里需要使用到fun1中的变量数量较多,所以希望不要通过参数传递来实现。 感谢您的回答! 如果有其他解决方案望能告知,谢谢!
傅小黑
傅小黑
似乎只能传递参数进去了。。
玩玩灬而已
玩玩灬而已
我使用的是php5.2+请问有其他的代替方法吗?
0
阳光test
阳光test
function fun1($str) {
	function fun2($str) {
		echo $str;
	}
	fun2($str);
}
fun1("aaa");
玩玩灬而已
玩玩灬而已
回复 @明庭令 : 我试了使用global,好像也解决不了这个问题。global只能获取到fun1的变量,无法获取到fun1内的变量
阳光test
阳光test
回复 @玩玩灬而已 : 那你就需要使用global来声明这个变量了,不过这种很不好啊
玩玩灬而已
玩玩灬而已
这里我是想把function当做一个过程来使用。由于我的实际源文件中fun2里需要使用到fun1中的变量数量较多,所以希望不要通过参数传递来实现。 请问还有其他的解决方案吗?
0
酒逍遥
酒逍遥

这样可以获取fun1 的所有变量


<?php
function fun1() {
    global $arr;
    $str = 'str';
    $str1 = 'str1';
    $str2 = 'str2';
    $arr=get_defined_vars();
    function fun2() {
        global $arr;extract($arr);
        echo $str.' '.$str1.' '.$str2;
    } 
    fun2();
}

fun1();
?>

最后会输出 :str str1 str2

捕捉流星的孩子
捕捉流星的孩子
此方法可行,但总感觉在php里使用函数嵌套函数有点奇怪
返回顶部
顶部