2.4 变量
变量是指在程序的运行过程中随时可以发生变化的量,在代码中可以只使用一个变量,也可以使用多个变量,变量中可以存放单词、数值、日期以及属性等。变量的值是临时的,当程序运行的时候,该值是存在的,如果程序结束,变量的值就会丢失。虽然在前面的示例中也使用到了变量,但是没有详细的说明,本节将详细介绍如何创建变量,以及如何引用变量。
2.4.1 创建变量
PHP中的变量是用美元符号($)作为前缀的标示符,标识符是一个标识不同对象的符号,如变量的名称,函数的名称,或者其他用户自定义对象的名称。在PHP中,标识符的命名必须符合下面的规定:
l 标识符可以由一个或多个字符组成,但必须以字母或下划线开头。此外,标识符只能由字母、数字、下划线字符和从127到255的其他ASCII字符组成。如my_a、Ss、_value这些标识符名称都是合法的,而q^a、4tt这些变量的名称是不合法的。
l 标识符区分大小写。因此,变量$recipe不同于变量$Recipe、$rEciPe或$recipE。
l 标识符可以是任意长度。这很有好处,因为这样一来,程序员就能通过标识符名准确地描述标识符的用途。
l 标识符名称不能与任何PHP预定义关键字相同。
在创建变量的过程中,先声明变量,再给变量赋值是一个好的习惯。由于PHP是一种弱类型语言,在声明变量时,不需要显示声明变量,变量可以存放任何类型的值,在PHP中,变量在运行时进行类型检查,并且可以用另一个不同类型的值取代变量的值,下面声明一个变量,并且让另一个不同类型的值取代变量的值,再为声明一个没有赋值的变量,具体代码如下所示:
$what = “Yound Tang”;
$what = 25;
$name;
在PHP中,给变量赋值有两种方式,分别为值赋值和引用赋值。值赋值是直接把一个数值通过赋值表达式复制给变量,会把该变量原来的数值覆盖,如果在声明变量时,没有赋值,其行为就形同NULL。在声明变量时赋值是一种常用的变量的赋值方法,使用示例如下所示:
$name = “唐晓阳”;
$age = “23”;
$sex = “男”;
echo “你的姓名是:”.$name.”
”;
echo “你的年龄是:”.$age.”
”;
echo “你的性别是:”.$sex.”
”;
执行该段代码,执行结果如下所示:
你的姓名是:唐晓阳
你的年龄是:23
你的性别是:男
在PHP中,声明变量可以直接赋值,也可以不赋值,当需要使用变量存储值时,可以引用变量赋值,引用赋值表示所创建的变量与另一个变量引用的内容相同。因此,如果多个变量引用了同一个内容,修改其中任意一个变量,在其余的变量上都将有所反映。在等于号后面加一个&符号就可以完成引用赋值。引用赋值的示例形式如下所示。
$value1="Hello World";
$value2=& $value1;
$value2="GoodBye";
echo $value1.”
”;
echo $value2.”
”;
在上述代码中,创建一个变量value1并赋值为“Hello World”,在下面的语句中,变量$value2采用了引用赋值,即把value1的值赋给了value2,此时这两个变量就是一个生命共同体了,当一个发生变化,另外一个就会显示出结果,该段代码执行结果如下所示:
GoodBye
GoodBye
2.4.2 变量作用域
声明变量的位置决定了变量的作用域,变量的作用域决定了程序的那些部分可以访问该变量,那些部分不可以访问该变量,在PHP中,变量的作用域范围可以分为四类:局部变量、函数参数、全局变量和静态变量,本节主要介绍变量的这几种作用域范围。
1.局部变量
在一个函数中声明一个变量是那个函数的局部变量,也就是说该变量只能被函数内部成员访问,函数外部成员是不能访问该变量,并且不可见。默认情况下,函数内部成员不能访问函数外定义的变量(平常所说的的全局变量)。有时局部变量很有用,因为局部变量能够消除出现一位副作用的可能性,否则这些副作用将导致可全局访问的变量被有意或无意地修改。下面创建一个使用局部变量的示例,该示例如代码2.13所示。
代码2.13 使用局部变量
$count =10;
function AddCount()
{
$count = 100;
$count = $count + $count;
echo $count;
echo "
";
}
AddCount();
echo $count;
?>
执行代码2.13,执行结果如下所示:
200
10
有输出结果知,该段代码输出了两个不同的值,这是因为函数AddCount函数中的变量为局部变量,修改局部变量的值不会影响函数外部的任何值,函数中的变量在程序结束时被抛弃,所以全局变量值还是10。
2.函数参数
在PHP中,函数可以接受相应的参数,虽然这些参数是接受函数外部的值,但退出函数后就无法访问这些参数,在函数执行结束后,参数的值就会消失,和函数的执行有很大的关系。函数参数是在函数后面的括号内声明,下面使用该参数创建一个示例,该示例如代码2.14所示。
代码2.14 运用函数参数
function EchoNum($age,$class)
{
echo "你的年龄是:".$age."
";
echo "所在班级:".$class;
}
EchoNum(18,"计算机技术与科学系08级5班");
?>
执行该段代码,执行结果如下所示:
你的年龄是:18
所在班级:计算机技术与科学系08级5班
函数参数也可以称为是局部变量,意味着这些参数只在函数内部起作用,在函数的外部不能访问这些变量,同样当函数执行结束时,变量同样也会撤销。
3.全局变量
全局变量可以在整个PHP程序中,任何地方访问,但是如果要修改一个全局变量,必须在修改该变量的函数中显式的声明为全局变量,在函数中显示声明全局变量很简单,只需在函数中使用global关键字声明就可以,下面创建一个使用全局变量的示例,具体讲解在函数中如何修改全局变量,该示例如代码2.15所示。
代码2.15 在函数中修改全局变量
function AddNum()
{
global $num;
$num = $num + $num ;
echo $num ;
}
$num = 100;
AddNum();
?>
执行代码2.15,执行结果如下所示:
200
如果不在$num前加global,该变量会被认为是局部变量,此时页面上显示的值为0;添加global后,就可以修改全局变量了,声明全局变量还有另外一种方法,那就是使用PHP的$GLOBALS数组,使用该数组和使用global的效果一样,下面创建一个使用$GLOBALS数组的示例,该示例如代码2.16所示。
代码2.16 使用$GLOBALS数组
function AddNum()
{
$GLOBALS['num'] =$GLOBALS['num']+$GLOBALS['num'] ;
echo "该值是:".$GLOBALS['num'] ;
}
$num = 100;
AddNum();
?>
执行代码2.16,执行结果如下所示:
该值是:200
| 在使用全局变量时,一定要注意,因为使用全局变量很容易发生意外。 |
4.静态变量
静态变量在两次调用函数之间其值不变,静态变量仅在局部函数域中声明,用关键字static可以声明一个静态变量。静态变量在函数退出时,不会丢失值,并且再次调用此函数时,还能保留值。下面创建一个使用静态变量的示例,该示例如代码2.17所示。
代码2.17 使用静态变量
function keepNum()
{
static $num =0;
$num ++;
echo "现在静态变量的值是:".$num;
echo "
";
}
$num = 10;
echo "变量num的值是:".$num."
";
keepNum();
keepNum();
?>
执行代码2.17,执行结果如下所示:
变量num的值是:10
现在静态变量的值是:1
现在静态变量的值是:2
由代码2.17执行结果知,由于在函数中指明了变量为静态变量,因此在执行函数时保留了前面的值。
2.3.3 变量的变量
创建一个变量,需要该变量赋值,当然也可以引用赋值,有时候也需要使用该变量的内容作为变量名,也就是说这个变量存放在另一个变量中。定义变量的变量只需要在变量的前面再添加一个美元符号即可。下面创建一个示例,该示例代码如下所示:
$name = "Yound";
$$name = " Tang";
echo $name.$$name;
?>
执行该端代码,执行结果如下所示:
Yound Tang
由上面例子知,一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。就可以作为一个可变变量的变量了,这时,两个变量都被定义了