php中局部变量和全局变量

代码1:函数内部使用函数外部变量错误方法

<?php
$name = 'fish';
function animal() {
echo $name;
}
animal();


运行结果:Notice: Undefined variable: name in D:\wamp\www\index.php on line 5 

由此得知,animal()方法中的name和方法外部的name和方法外部的name不是同一个变量。

如何才能在函数内部访问到函数外部的变量呢?可以在函数内部或者外部将name变量定义为全局变量,在name变量定义为全局变量,在name之前加上global即可;如下所示:

 

代码2:函数内部使用函数外部变量正确方法

<?php
$name = 'fish';
function animal() {
global $name;
echo $name;
}
animal();


<?php
global $name;
function animal() {
$name = 'fish';
echo $name;
}
animal();


运行结果:fish

那么,如果$name变量是在函数内部定义的,能够在函数外部或者别的函数中使用到吗?答案是显而易见的,不能,这就是局部变量,可以看下下面的代码段:

 

代码3:函数外部使用函数内部变量错误方法

<?php
function animal() {
$name = 'fish';
}
echo $name;


运行结果:Notice: Undefined variable: name in D:\wamp\www\index.php on line 6 

$name变量只能在animal()函数内部有意义。问题来了,如果我非要想在函数外部也能使用到函数内部定义的变量该怎么办? 

“可以在函数内部定义变量时将其声明为global”,请看如下代码段:

 

代码4:函数外部使用函数内部变量正确方法

<?php
function animal() {
global $name;
$name = 'fish';
}
animal();
echo $name;


运行结果: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() 一个静态变量,那么在函数内部此静态变量将被销毁。但是,当再次调用此函数时,此静态变量将被复原为上次被销毁之前的值。