PHP中的变量
PHP中的类型转换
PHP中的变量的变量和引用变量
关联课件: 4子项目四 -PHP中的变量(点击在线预览)
4.3.3 PHP中的变量
PHP中预先定义了很多变量,用户可以随时在脚本中引用。PHP的预定义变量将在后面的章节进行讲解,下面主要讲解自定义变量。
4.3.3.1 变量定义与变量类型
在PHP中一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母、数字或下划线。PHP的变量属于松散的数据类型,具体使用时应注意以下几点。
(1) 变量名要以“$”开头,且区分大小写。
(2) 变量不必要预先定义或声明。
(3) 变量在使用时编译器可动态进行类型指定和转换。
(4) 变量如果未赋值而直接使用,变量值将被视为空。
提示
最好使用相同的变量命名风格,以免在团队合作或自己查找错误的时候因变量大小的问题,浪费过多时间,那就得不偿失了。变量之间可自由转换类型,但浮点数转成整数就有点牵强了,可以将浮点数转换成字符串,这是很好处理的。
PHP支持8种原始变量类型,其中包含4种标量类型、2种复合类型、2种特殊类型,如表4-1所示。
下面,分别介绍这8种变量类型。
1.布尔型(boolean)
布尔型是最简单的类型,也被称为逻辑型,其值非真即假,主要用在条件表达式和逻辑表达式中,用以控制程序流程。要指定一个布尔值,使用关键字TRUE或FALSE(两个都不区分大小写)。其他类型的数据均可以转换为布尔型,详见类型转换。
2.整型(integer)
整型数的字长和平台有关,最大值大约是二十亿(32位有符号)。
整型值可以用十进制、十六进制或八进制符号指定,前面可以加上可选的符号(-或者+)。要使用八进位整数可以在面加0(零),要使用16进位整数可以在面加0x。
$int1=1234 //十进制正整数
$int1=-1234 //负整数
$int1=01234 //八进制整数
$int1=0x1234 //十六进制整数
3.浮点型(double (floating point number))
在32位的操作系统中,它的有效范围是1.7E-308~1.7E 308,如:
$float1=666.66
$float2=6.6666e2 //表示6.6666乘以10的2次方,为指数形式的浮点数
值得注意的是,浮点型变量显示的十进制数的位数由php.ini文件中的precision(精度)定义,预定值为12,即浮点数最长占14个字符。
4.字符串(string)
无论是单个字符还是很长的字符串都是使用这个变量类型。值得注意的是要将指定字符串赋值给字符串变量时,要在头尾都加上双引号或单引号(例如:"这是字符串"或'这是字符串')。在PHP中还提供一些转义字符,用以表示那些已经被程序语法结构占用了的特殊字符,如表4-2所示。
提示
有了PHP变量的理论知识,下面来通过实例来看其具体使用。
<!--文件4-7.php:PHP变量的使用=>布尔型、整型、浮点型、字符串--> <HTML> <HEAD> <TITLE>PHP变量的使用之一</TITLE> </HEAD> <BODY> <?php $string1 = "输出字符串变量类型的内容!"; echo $string1; //输出字符串变量“$string1”的内容 echo "<br>"; //输出换行 $string2 = "输出特殊字符:"; echo $string2 . ""; echo "$"; echo '''; echo """; echo "x52"; echo "<br>"; $int1=01234; // 八进制整数 $int2=0x1234; // 十六进制整数 echo "输出整型变量的值:"; echo $int1; // 输出668 echo " "; // 输出一个制表位 echo $int2; // 输出4660 echo "<br>"; $float1=6.6666e2; echo "输出浮点型变量的值:"; echo $float1; // 输出666.66 echo "<br>"; echo "输出布尔型变量的值:"; echo (boolean)($int1); // 输出转换后的布尔变量--“1” ?> </BODY> </HTML>
程序4-7.php涉及到了变量类型中的字符串、整型、浮点型、布尔型变量的使用,其运行结果如图4-7所示。
图4-7 程序4-7.php的运行结果
5.数组(array)
数组变量可以是一维数组、二维数组或者更多维数组,其中的元素可以为多种类型,可以是字符串、整型、浮点型、布尔型,甚至是数组或对象等。
在PHP中可以使用array()函数来创建数组,也可以直接进行赋值。使用array()来创建数组的语法为:
array( [ key => ] value,
…
)
其中key可以是integer或者string,是以后存取的标志。特别地,当为integer时,没有序号意义,value可以是任何值。
用array()函数创建数组的方法如程序4-8.php所示。
<!--文件4-8.php:用array()函数创建PHP数组--> <HTML> <HEAD> <TITLE>用array()函数创建PHP数组</TITLE> </HEAD> <BODY> <?php $arr=array ( 0=>6, 2=>6.666e2, 1=>"我爱PHP", "str"=>"string", ); for ($i=0;$i<count($arr);$i ) { $print=each($arr); echo "$print[value]<br>"; } ?> </BODY> </HTML>
程序中使用for循环用来输出整个数组。其中函数count()用来计算出数组元素的个数,函数each()返回当前数组指针的索引/值对,在后面的章节还将会讲到。程序4-8.php的运行结果如图4-8所示。
图4-8 程序4-8.php的运行结果
我们也可以采用将给一个一个数组元素赋值的方法,如程序4-9.php所示。
<!--文件4-9.php:逐一给数组元素赋值--> <HTML> <HEAD> <TITLE>逐一给数组元素赋值</TITLE> </HEAD> <BODY> <?php $arr[0]=6; $arr[2]=6.666e2; $arr[1]="我爱PHP"; $arr["str"]="string"; for ($i=0;$i<count($arr);$i ) { $print=each($arr); echo "$print[value]<br>"; } ?> </BODY> </HTML>
使用上面这种简洁方式给数组赋值时,数组的默认下标为0、1、2、3。程序4-10的运行结果与程序4-8.php的运行结果相同。
PHP中多维数组与一维数组的区别在于多维数组有两个或多个下标,其用法基是一样的。程序4-11就是采用逐一给二维数组元素赋值的方法来创建和使用二维数组的。
<!--文件4-11.php:多维数组的逐一赋值法--> <HTML> <HEAD> <TITLE>多维数组的逐一赋值</TITLE> </HEAD> <BODY> <?php $arr[0][0]=6; $arr[0][1]=6.666e2; $arr[1][0]= "我爱PHP"; $arr[1]["str"]="string"; for ($i =0;$i<count($arr);$i ) { for ($j = 0;$j<count($arr[$i]);$j ) { $print=each($arr[$i]); echo "$print[value]<br>"; } } ?> </BODY> </HTML>
其运行结果与程序4-8.php运行结果相同。
还可以使用层次更明显、更容易理解和接受的多维数组赋值方式:嵌套的array()函数方式来创建PHP数组并给数组元素赋值,如程序4-12所示。
<!--文件4-12.php:用嵌套的array()函数创建PHP数组--> <HTML> <HEAD> <TITLE>用嵌套array()函数创建PHP数组</TITLE> </HEAD> <BODY> <?php $arr=array ( 0=>array ( 0=>6, 2=>6.666e2, ), //此处应该是“,”,而不是“;” 1=>array ( 0=>"我爱PHP", "str"=>"string" ) ); for ($i =0;$i<count($arr);$i ) { for ($j = 0;$j<count($arr[$i]);$j ) { $print=each($arr[$i]); echo "$print[value]<br>"; } } ?> </BODY> </HTML>
其运行结果与程序4-8.php运行结果相同。
6.对象(object)
object为对象类型变量,是类的具体化实例,第4章会对其进行详细讲解。
7.资源(resource)
资源是一种特殊变量,其中保存了到外部资源的一个引用。资源是通过专门的函数来建立和使用的。资源类型变量保存了打开文件、数据库连接、图形画布区域等的特殊句柄,在后面的章节中会陆续学习到。
8.NULL
NULL类型只有一个值,就是大小写敏感的关键字NULL,表示一个变量没有值。
在下列情况下一个变量的值被认为是NULL。
(1)被赋值为NULL。
(2)尚未被赋值。
(3)被unset()(销毁指定的变量)。
提示
4.3.3.2 变量类型转换
前面已经提到过,PHP的变量属于松散的数据类型,也就是说PHP在变量定义时不需要(或不支持)类 型定义,变量的类型是根据使用该变量的上下文所决定的。如果把一个字符串值赋给变量var,var就成了一 个字符串;如果又把一个整型值赋给var,那它就成了一个整数。
在PHP中是怎样处理变量不同类型间的相互转换的呢?PHP提供了两种类型转换的方法:自动类型转换 和强制类型转换。
PHP的自动类型转换的一个例子是加号“ ”。如果任何一个运算数是浮点数,则所有的运算数都被当成 浮点数,结果也是浮点数。否则运算数会被解释为整数,结果也是整数。注意这并没有改变这些运算数本身 的类型;改变的仅是这些运算数如何被求值。也就是说,自动类型转换并不能改变变量本身的数据类型,改 变的仅仅是变量作为运算数时被求值得方式。
PHP中的类型强制转换和C中的强制类型转换相似:在要转换的变量之前加上用括号括起来的目标类型。 允许的强制转换如下。
(int)或(integer):转换成整型。
(bool)或(boolean):转换成布尔型。
(float)、(double)或(real):转换成浮点型。
(string):转换成字符串。
(array):转换成数组。
(object):转换成对象。
其使用方法为:
(int)$变量名或(integer)$变量名
为了便于理解,现举例如下。
<!--文件4-13.php:变量类型转换--> <HTML> <HEAD> <TITLE>变量类型转换</TITLE> </HEAD> <BODY> <?php $var1 = "0"; //$var1是一个字符串 echo $var1."<br>"; $var2 =$var1 2; //$var2是一个整数 echo $var2."<br>"; $var3 = $var2 1.3; //$var3是一个浮点数 echo $var3."<br>"; $var4 = 5 "10 PHP 5.2"; //整数与字符串相加结果为正数 echo $var4."<br>"; $var5 = 5 "PHP 5.2"; //整数与字符串相加结果为正数 echo $var5."<br>"; $var6 = (bool)-2; //-1和其他非零值(不论正负)转换成布尔型,都被认为是TRUE! echo $var6."<br>"; $var7 = 10/3; echo $var7."<br>"; $var8 = (int)$var7; //强制转换为整数 echo $var8."<br>"; $var9=1.3e5; $var10 = (float)$var9; //强制转换为浮点数 echo $var10."<br>"; $var11 = (string)$var3; echo "$var11的类型为:".gettype($var11)."<br>"; //gettype()为获取变量类型的函数 ?> </BODY> </HTML>
程序4-13.php运行结果如图4-9所示。
图4-9 程序4-13.php的运行结果
4-13.php中仅举例说明了部分类型转换,转换为布尔值时需要注意以下几点。
当转换为boolean时,以下值被认为是FALSE。
(1)布尔值FALSE。
(2)整型值0(零)。
(3)浮点型值0.0(零)。
(4)空白字符串和字符串"0"。
(5)没有成员变量的数组。
(6)没有单元的对象(仅适用于PHP 4)。
(7)特殊类型NULL(包括尚未设定的变量)。
所有其他值都被认为是TRUE(包括任何资源)。值得注意的是,-1和其他非零值(不论正负)一样, 被认为是TRUE!在求表达式的值和条件判断时一定要注意!
4.3.3.3 “变量的变量”
“变量的变量”是指在变量的名称中含有其他变量的一类变量。其实“变量的变量”这个名称并不太准 确,有的地方也称为可变变量或动态变量。也就是说,通过“变量的变量”可以实现动态地设置和使用一个 变量的变量名。通过程序4-14.php就很容易理解它的使用方法。
<!--文件4-14.php:变量的变量--> <HTML> <HEAD> <TITLE>变量的变量</TITLE> </HEAD> <BODY> <?php $var = 'hello'; $$var = ' world!'; // 定义变量的变量 echo $var.${$var}."<br>"; // 输出变量的变量 echo $var.$hello; // 输出变量的变量 ?> </BODY> </HTML>
程序4-14.php的运行结果如图4-10所示。
图4-10 程序4-14.php的运行结果
从程序中不难发现定义变量的方法,如第9行所示输出或使用变量的变量的方法有两种,如第10行和11 行,而且这两方法的效果是一样的。
提示
4.3.3.4 引用变量
PHP中支持引用变量,这是从C 语言中借用而来的。对一个变量进行引用产生新变量后,新变量可以 看作是原变量的一个别名,改变其中任何一个的值,两个变量的值都会发生改变。使用引用变量的方法是赋 值时在右边变量前加“&”符号,如程序4-15.pnp所示。
<!--文件4-15.php:引用变量--> <HTML> <HEAD> <TITLE>引用变量</TITLE> </HEAD> <BODY> <?php $int1=8; $int2=&$int1; $int2 ; echo $int1; ?> </BODY> </HTML>
程序4-15.php的运行效果如图4-11所示。
图4-11 程序4-15.php的运行结果
引用变量在进行赋值时,系统让新变量和原变量共用一个地址,并没有变量复制的操作,所以速度非常 快。如果参数是大数组或对象,使用引用变量进行参数传递能节省内存并加快程序运行速度。不过其副作用 就是引用值改变,原变量也会发生改变,因此是否能使用引用变量进行参数传递要视具体情况而定。
1.变量特点: 在定义后后还可以多次赋值 定义在那个范围就在那个范围有效,如函数中定义的变量就只在函数中有效。 可以通过unset()销毁 2.常量特点 常量前面面没有$符号 常量只能通过define()函数定义或者是const关键字定义(const定义常量,是在php5.3版本后),如 define('PI',3.14)或者const PI=3.14 且值只能是标量,即可以是 整型 浮点型 布尔型 null 字符串等。在定义后,无论在那定义,都可以直接调用,没有作用域。定义后不可以再赋值一直存在内存中,不能被销毁。常量的值 不能是 数组 对象 资源,可以通过 bool defined() 函数判断某个常量是否已经被定义了。
老师讲的很详细,从中学到了很多。
对于PHP变量有了一个基本的了解
还可以这么玩
这些语法基础对于刚学习PHP的人来说是非常重要的,条理清晰,方便学习
6666
引用变量在进行赋值时,系统让新变量和原变量共用一个地址,并没有变量复制的操作,所以速度非常 快。如果参数是大数组或对象,使用引用变量进行参数传递能节省内存并加快程序运行速度。不过其副作用 就是引用值改变,原变量也会发生改变,因此是否能使用引用变量进行参数传递要视具体情况而定。