一、变量赋值方式:传值赋值、引用赋值
PHP的变量用$跟一个变量名来表示,变量名是大小写敏感的。变量赋值有两种方式:传值赋值、引用赋值。
(1)传值赋值。传值赋值是将一个表达式的值赋予一个变量,使用=进行赋值。
这种赋值方式是将整个原始表达式的值传给目标变量。传值赋值方式将原变量的值赋予目标变量后,改变目标变量的值不会影响到原变量的值。 原变量和目标变量在存储系统中是相互独立的。传值赋值实际上在存储系统中执行了复制操作。
(2)引用赋值。引用赋值是新变量简单的引用了原变量,即新变量成为了原变量的别名,它们的值或内容在存储系统同一位置。
引用赋值后,改变新的变量将会影响到原变量,反之亦然。引用赋值的好处是赋值操作更加快速。引用赋值使用专门的操作符&,如$a=&$b.
ps:只有确定名字的变量才可以作为引用赋值的原变量,其他情况将发生错误。
ps:可变变量/动态变量。当一个变量的值是另一个变量的变量名时,这个变量称为可变变量或动态变量。
ps:当对引用使用unset()函数时,只是断开了变量名和变量之间的绑定关系,并不意味者变量内容被销毁。
<?php $a = 1; $b =& $a; unset ($a); echo $b; //$b可以继续使用,并没有被销毁 ?>
二、变量的作用范围
变量的作用范围就是变量的生效范围。变量的作用范围分为全局范围和局部范围,即全局变量和局部变量。
若变量在用户自定义函数中定义,那么默认是局部变量,若要在函数内部使用全局变量可以用global来指定。global关键字的用处:1、使用global在用户定义函数内定义全局变量,使函数外也可使用该变量。2、在用户定义函数内使用global声明变量为全局变量,使在函数内使用函数外边的变量。总而言之,在函数中使用global $a声明一个变量$a时,如果已经存在全局变量$a,那么此处的意思是要在函数中使用该全局变量$a;如果不存在全局变量$a,那么此处的意思是定义一个全局变量,函数外部也可以使用该变量。
<?php $b=20; function test() { global $a; $a=1000; global $b; echo $b; } test(); echo $a; ?>
当然,在函数内访问全局变量还有另外一个办法:使用PHP预定义变量$GLOBALS数组。$GLOBALS数组包含当前脚本全局范围内有效变量的引用,该数组元素的键名为全局变量的名称。
<?php $b=20; function test() { echo $GLOBALS['b']; } test(); ?>
三、变量的生存周期:静态变量
变量的生存周期是变量可供使用的时间段,即变量的寿命。变量在生存期内都是有效的,超过生存期变量就会失效。当变量失效后,变量就不再存在,也不能访问该变量的值了。
全局变量的生存周期是整个文件(当然包括include/require包含的文件)。而用户在函自定义函数内定义的变量,即局部变量,在函数结束时就会消失。如果,需要局部变量在每次函数执行完不消失,可以将局部变量定义为静态变量。定义静态变量的关键字是static。
ps:静态变量是局部变量,只能在函数内部使用。而静态变量在函数执行完并不消失,下次调用函数时还是使用的该变量。
<?php function test() { static $a=0; $a++; echo $a.'<br />'; } test(); test(); ?>
四、预定义变量
PHP除了预定义了一些常量,如PHP_OS、__FILE__等,还提供了大量的预定义变量。预定义变量,也叫系统变量,许多与定义变量依赖于运行的服务器版本和PHP配置文件的设置。
前面介绍的用于访问全局变量的$GLOBALS就是一个预定义变量。
这些预定义变量会在以后经常使用,需要铭记。
转载请注明:jinglingshu的博客 » PHP变量