PHP 中的变量用一个美元符号后面跟变量名来表示。变量名是区分大小写的。一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线。$this 是一个特殊的变量,它不能被赋值。PHP 也提供了另外一种方式给变量赋值:引用赋值,将一个 & 符号加到将要赋值的变量前(源变量)。
未初始化的变量具有其类型的默认值 - 布尔类型的变量默认值是 FALSE,整形和浮点型变量默认值是零,字符串型变量默认值是空字符串或者数组变量的默认值是空数组。建议初始化,isset() 语言结构可以用来检测一个变量是否已被初始化。
PHP 提供了大量的预定义变量。
任何用于函数内部的变量按缺省情况将被限制在局部函数范围内。例如:
1 <?php 2 $a = 1; /* global scope */ 3 4 function Test() 5 { 6 echo $a; /* reference to local scope variable */ 7 } 8 9 Test(); 10 ?>
这个脚本不会有任何输出,因为 echo 语句引用了一个局部版本的变量 $a,而且在这个范围内,它并没有被赋值。。PHP 中全局变量在函数中使用时必须申明为global。
1 <?php 2 $a = 1; 3 $b = 2; 4 5 function Sum() 6 { 7 global $a, $b; 8 9 $b = $a + $b; 10 } 11 12 Sum(); 13 echo $b; 14 ?>
以上脚本的输出将是“3”。在函数中申明了全局变量 $a 和 $b,任何变量的所有引用变量都会指向到全局变量。
在全局范围内访问变量的第二个办法,是用特殊的 PHP 自定义 $GLOBALS 数组。
1 <?php 2 $a = 1; 3 $b = 2; 4 5 function Sum() 6 { 7 $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b']; 8 } 9 10 Sum(); 11 echo $b; 12 ?>
$GLOBALS 是一个关联数组,每一个变量为一个元素,键名对应变量名,值对应变量的内容。$GLOBALS 之所以在全局范围内存在,是因为 $GLOBALS 是一个超全局变量。
静态变量
变量范围的另一个重要特性是静态变量(static variable)。静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。
可变变量
一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。
<?php $a = 'hello'; ?> <?php $$a = 'world'; ?> <?php echo "$a ${$a}"; ?>
两个变量都被定义了:$a 的内容是“hello”并且 $hello 的内容是“world”。
将可变变量用于数组,必须解决一个模棱两可的问题。当写下 $$a[1] 时,解析器需要知道是想要 $a[1] 作为一个变量呢,还是想要 $$a 作为一个变量并取出该变量中索引为 [1] 的值。解决此问题的语法是,对第一种情况用 ${$a[1]},对第二种情况用 ${$a}[1]。