2.3 变量
变量是任何程序设计语言中一个基本而且重要的概念。本节内容将介绍PHP变量的基本概念、变量的类型、PHP预定义变量,以及如何使用PHP内置函数对变量进行一些处理。
2.3.1 什么是变量
在程序中可以改变的数据量叫做变量。变量必须有一个名字,用来代表和存放变量的值。PHP中使用美元符($)后跟变量名来表示一个变量,如$var就是一个变量。PHP中的变量名是区分大小写的,因此,$var和$Var表示的是两个不同的变量。
2.3.2 变量的命名规则
变量的命名与其他PHP标签遵守相同的规则,正确的变量名由“$”符号后面跟随以字母或下划线开头的任意数量的字母、数字、下划线,其中字母的范围是小写字母a~z和大写字母A~Z,使用ASCII码表示就是127~255;下划线是指“_”;数字是从0-9取值。例如如下示例代码,演示了正确的定义变量名,同时也演示了以数字或其他符号开头的非法变量名。
<?php // 合法变量名 $age = 12; // 合法变量名 $is12 = 12; // 以字母开头的合法变量 $_12 = 12; // 下划线开头的合法变量名 $_ 十二 = 12; // 下划线开头的合法变量名 $is 十二 = 12; // 以字母开头的合法变量 // 非法变量名 $12 = 12; // 使用数字开头的非法变量名 $ 十二 = 12; // 使用其他符号开头的非法变量名 $1two = 12; // 使用数字开头的非法变量名 $*12 = 12; // 使用其他符号开头的非法变量名 ?>
值得注意的是,虽然以字母和下划线开头,后面跟随中文字符也可以作为变量名称,但是考虑到输入和运行平台等情况,不建议使用。
2.3.3 变量类型的转换
和C、C++等语言不同,PHP在定义变量时不需要明确指定变量的类型。也就是说,把一个整数指定给变量$v,那么$v就是一个整型变量;如果把一个字符串指定给它,那么它就是一个字符串变量。若要转换类型,在PHP程序中也是很自由的,一般不必经过特殊的转换。
当然,PHP中也可以对变量做强制转换,这点和C语言相似,在要转换的变量之前加上目标类型,目标类型用括号括起来。如代码2-5所示,即将整型变量转换成布尔型变量。
代码2-5 变量类型的强制转换2-5.php
01 <?php 02 $foo = 10; // 定义一个整型变量 03 04 echo " 转换前:\$foo=".$foo; 05 echo "<br/>"; 06 echo "<br/>"; 07 08 $foo = (boolean) $foo; // 转换变量类型为boolean 型 09 echo " 转换后:\$foo=".$foo; 10 ?>
图2-5 变量类型的强制转换
【代码解析】代码第02行定义的变量$foo是整型,第08行用(boolean)将其强制转换为布尔型,非零值转换为布尔型结果都为真(1)。
代码2-5执行结果如图2-5所示。
PHP中允许的强制类型转换有如下几种。
·(int)、(integer)——转换成整型。
·(bool)、(boolean)——转换成bool型。
·(float)、(double)、(real)——转换成浮点型。
·(string)——转换成字符串型。
·(array)——转换成数组型。
·(object)——转换成对象型。
2.3.4 可变变量
可变变量是PHP中比较特别的一个概念。可变变量是指这样一个变量,它将某个变量的值作为自己的变量名,例如代码2-6。
代码2-6 可变变量2-6.php
01 <?php 02 $i = "abc"; // 定义变量$i ,其值为abc 03 $$i = "xyz"; // 将变量$i 的值abc 作为变量名,$i 被其值abc 替换,因此,这句等价于$abc = “xyz ” 04 05 echo "\$i=".$i; 06 echo "<br/>"; 07 echo "<br/>"; 08 09 echo "$\$i=".$abc; 10 ?>
图2-6 可变变量
【代码解析】上述程序中,可变变量$$i将变量$i的值abc作为变量名,因此,$$i就是变量$abc。读者还要注意,第05行为了输出“$i”,使用了转义符\$i。程序执行结果如图2-6所示。
2.3.5 PHP的预定义变量
PHP提供了大量的预定义变量,可以在程序或文件的任何地方使用它们。这些变量大多数依赖于服务器的版本及其配置。本书主要介绍PHP 5的预定义变量,这些预定义变量和以前的版本有些不同,有兴趣的读者可自行了解。下面是PHP中一些常用的预定义变量。
·$GLOBALS:包含指向当前程序中全局范围内有效的变量,它是一个数组,该数组的索引(或键名)就是全局变量的名称。
·$_SERVER:该全局变量是一个包含诸如头信息、路径和脚本位置的数组。常见的$_SERVER的元素包括PHP_SELF(当前正在执行的脚本的文件名)、SERVER_ADD(当前执行脚本所在服务器的IP地址)、SERVER_NAME(当前执行脚本所在服务器主机的名称)、DOCUMENT_ROOT(当前脚本所在文档的根目录)、SCRIPT_FILENAME(当前执行脚本的绝对路径)、SCRIPT_NAME(当前脚本的路径)、HTTP_REFERER(链接到当前页面的前一页面的URL)及REQUEST_URI(访问此页面所需的URI)等。
·$_GET:通过HTTP的GET方法提交至脚本的表单变量。
·$_POST:通过HTTP的POST方法提交至脚本的表单变量。
·$_FILE:通过HTTP的FILE文件上传提交至脚本的变量。
·$_COOKIE:通过HTTP的Cookies方法提交至脚本的变量。
下面通过代码2-7来了解这些变量的使用,其执行结果如图2-7所示。
代码2-7 PHP的预定义变量2-7.php
01 <?php 02 $a = "test string"; 03 echo " 通过\$GLOBALS 来取变量值:".$GLOBALS['a']; // 输出变量a 的值 04 echo "<br/>"; 05 echo "<br/>"; 06 07 echo " 当前执行脚本的文件名:".$_SERVER['PHP_SELF']; // 输出文件名 08 echo "<br/>"; 09 echo "<br/>"; 10 11 echo " 当前执行脚本所在的根目录:".$_SERVER['DOCUMENT_ROOT']; // 输出根目录 12 echo "<br/>"; 13 echo "<br/>"; 14 15 echo " 当前执行脚本的绝对路径:".$_SERVER['SCRIPT_FILENAME']; // 输出文件绝对路径 16 echo "<br/>"; 17 echo "<br/>"; 18 ?>
图2-7 PHP的预定义变量
【代码解析】代码第03行通过$GLOBALS['a']来获取变量$a的值,$a在第02行已经定义过。第07行、第11行和第15行则通过$_SERVER获取当前脚本的一些位置信息。
2.3.6 判断变量的类型
从本小节开始将介绍一些处理变量的方法。因为在PHP中通常通过一些预定义函数来处理变量,所以需要读者对函数的概念有大概的了解。
简单地说,函数是指完成某种特定功能的代码块,可以向函数传入参数,函数对参数进行处理,并将处理结果返回给用户。
在PHP中,可以通过以下函数对变量的类型进行判断。
·函数is_integer():判断变量是否为整数。
·函数is_string():判断变量是否为字符串。
·函数is_double():判断变量是否为浮点数。
·函数is_array():判断一个变量是否为数组。
代码2-8演示了如何使用这些函数。
代码2-8 判断变量类型的函数2-8.php
01 <?php 02 $s = "this is a string"; 03 $i = 9; 04 $arr = array(2,4,6); 05 06 is_string($s); // 返回TRUE ,表示$s 是一个字符串变量 07 is_string($i); // 返回FALSE ,表示$i 不是一个字符串变量 08 is_array($arr); // 返回TRUE ,表示$arr 是一个数组 09 is_array($s); // 返回FALSE ,表示$s 不是一个数组 10 ?>
【代码解析】因为本例没有使用echo进行输出,所以如果运行上述代码没有任何输出。第06~09行测试了is_string()和is_array()的使用。
2.3.7 获取变量的类型
在PHP中,可以使用预定义函数gettype()取得一个变量的类型,它接受一个变量作为参数,返回这个变量的类型。例如代码2-9,程序执行结果如图2-8所示。
代码2-9 获取变量的类型2-9.php
01 <?php 02 $str = "this is a string"; 03 $int = 9; 04 $bool = FALSE; 05 06 echo "\$str 的类型是:".gettype($str); // 获取的是字符串类型 07 echo "<br/>"; 08 echo "<br/>"; 09 10 echo "\$int 的类型是:".gettype($int); // 获取的是整型 11 echo "<br/>"; 12 echo "<br/>"; 13 14 echo "\$bool 的类型是:".gettype($bool); // 获取的是boolean 类型 15 ?>
【代码解析】代码第02~04行定义了3个变量,虽然第06、10、14行输出不同的结果,不过,使用函数gettype()的方式都是一样的。
2.3.8 设置变量的类型
使用预定义函数settype()可以设置一个变量的类型。该函数接受两个参数:第1个参数是变量名;第2个参数是要设置的变量的数据类型。代码2-10演示了如何使用这个函数。
代码2-10 设置变量的类型2-10.php
01 <?php 02 $a = 100; 03 04 echo " 设置前,变量\$a 的类型是:".gettype($a); // 获取的是整型 05 echo "<br/>"; 06 echo "<br/>"; 07 08 settype($a,"string"); // 设置变量$a 为字符串 09 echo " 设置后,变量\$a 的类型是:".gettype($a); // 重新输出a 的类型 10 ?>
【代码解析】代码第08行使用函数settype()重新设置变量$a之前,$a是整型变量100,使用settype()设置$a的类型之后,$a成为字符串变量“100”。程序执行结果如图2-9所示。
图2-8 获取变量的类型
图2-9 设置变量的类型
2.3.9 判断一个变量是否已经定义
使用预定义函数isset()可以判断一个变量是否已经定义,它接受一个变量作为参数值,如果返回值为TRUE,说明该变量定义过,否则说明该变量没有被定义。代码2-11演示了如何使用这个函数。
代码2-11 判断变量是否被定义2-11.php
01 <?php 02 $var = "test string"; 03 04 echo isset($var); //$var 定义过,返回真 05 echo isset($a); //$a 未被定义,返回假 06 ?>
【代码解析】代码第04、第05行使用isset()判断$var和$a是否被定义过,因为$var在第2行定义过,所以返回真;而$a没有定义过,所以返回假。
2.3.10 删除一个变量
使用unset语句可以删除一个变量。从PHP 4开始,unset不再有返回值。因此,从严格意义上讲,它并不是一个函数,而是一个PHP的语言结构。用unset可以一次删除多个PHP变量。代码2-12演示了如何使用unset。
代码2-12 删除一个变量2-12.php
01 <?php 02 unset($var); // 删除单个变量 03 unset($arr['elem']); // 删除单个数组元素 04 unset($var1, $var2, $var3); // 一次删除多个变量 05 ?>
【代码解析】上述代码没有任何输出,这里只是向读者演示unset语句的用法,读者可以在习题2的问题中扩展此案例。
共有条评论 网友评论