php中局部变量和全局变量
代码1:函数内部使用函数外部变量错误方法
运行结果:Notice: Undefined variable: name in D:\wamp\www\index.php on line 5
由此得知,animal()方法中的name和方法外部的name和方法外部的name不是同一个变量。如何才能在函数内部访问到函数外部的变量呢?可以在函数内部或者外部将name变量定义为全局变量,在name变量定义为全局变量,在name之前加上global即可;如下所示:
代码2:函数内部使用函数外部变量正确方法
或
运行结果:fish
那么,如果$name变量是在函数内部定义的,能够在函数外部或者别的函数中使用到吗?答案是显而易见的,不能,这就是局部变量,可以看下下面的代码段:
代码3:函数外部使用函数内部变量错误方法
运行结果:Notice: Undefined variable: name in D:\wamp\www\index.php on line 6
$name变量只能在animal()函数内部有意义。问题来了,如果我非要想在函数外部也能使用到函数内部定义的变量该怎么办? “可以在函数内部定义变量时将其声明为global”,请看如下代码段:
代码4:函数外部使用函数内部变量正确方法
运行结果:fish
可以看到,我们先执行了animal()方法,然后再使用name变量,就有效果了,当然,如果你没有执行animal()函数,那么,该段程序根本就没有声明变量name的操作,所以,需要记住的是,函数只有被调用了才有意义,且程序执行的顺序时从上到下,从左往右的。
局部变量:在函数内部中定义的变量,它的作用域为函数定义范围内。
全局变量:在函数外部定义的变量,它的作用域从定义处一直到文件结尾。 在php中函数被视为单独的程序片,所以局部变量会覆盖全局变量,即使局部变量中并定义没有全局变量相同的变量,也会被覆盖。如下:$a=5;$b=3;function t(){ echo $a-$b;//输出0}要想在函数中直接使用全局变量可以通过 global关键字声明 或者通过php中自定义的$GLOBALS数组获取function t(){ global $a,$b; echo $a-$b;}function t(){ echo $GLOBALS['a']-$GLOBALS['b'];}静态变量:通过static 定义一个静态变量, 如: function test(){ static $t;$t++;return $t;}for($i=0;$i<6;$i++){ echo test()."<br />";}输出 1 2 3 4 5 即静态变量在第一次初始化后,该变量的值就一直存在内存中,不会随着函数而被注销。注意:如果在函数中 unset() 一个静态变量,那么在函数内部此静态变量将被销毁。但是,当再次调用此函数时,此静态变量将被复原为上次被销毁之前的值。