3.2 常量和变量
常量和变量是程序设计语言的最基本元素,它们是构成表达式和编写程序的基础。本节将介绍PHP语言的常量和变量。
3.2.1 数据类型
数据类型在数据结构中的定义是一个值的集合以及定义在这个值集上的一组操作。使用数据类型可以指定变量的存储方式和操作方法。PHP的常用数据类型如表3-1所示。
表3-1 PHP的常用数据类型
续表
这里,读者只需要了解PHP语言包含哪些数据类型以及这些数据类型的基本情况。数据类型的使用往往与变量的定义联系在一起。本书后续内容很多都涉及数据类型的使用。
3.2.2 常量
常量是内存中用于保存固定值的单元,在程序中常量的值不能发生改变。在程序设计时使用常量会带来很多方便,如将常量PI定义为3.14159后,就可以在后面的程序中使用PI这个直观的符号来代替3.14159这个复杂的数字了。
常量具有两个属性,即名字和值。每个常量都有一个为标识它的名字,名字对应于保存常量的内存地址。
常量名遵循下面的命名规则:
• 合法的常量名以字母或下画线开始;
• 首字符的后面可以跟着任何字母、数字或下画线;
• 常量默认为大小写敏感,也就是说PI和pi不是同一个常量,通常常量名总是大写的。
可以使用define()函数来定义常量,其基本语法结构如下:
define(常量名, 常量值);
【例3-8】 定义一个常量MYSTR,其內容为“这是一个常量”,代码如下:
<?PHP
define("MYSTR", "这是一个常量");
echo(MYSTR);
?>
运行结果如下:
这是一个常量
一旦定义了常量,就不能修改它的值,或对其进行重新定义。
【例3-9】 一个重复定义变量的例子。
<?PHP
define("MYSTR", "这是一个常量");
echo(MYSTR);
echo("<BR>");
define("MYSTR", "这是另一个常量");
echo(MYSTR);
?>
运行结果如下:
这是一个常量
这是一个常量
可以看到变量MYSTR的值没有被修改。
3.2.3 变量
变量是内存中命名的存储位置,与常量不同的是变量的值可以动态变化。在PHP中,使用$加上一个标识符来表现变量,如$a。变量名的命名规则与常量名的命名规则相同,具体情况参见3.2.2小节。
PHP的变量不需要声明,可以直接使用赋值运算符对其进行赋值操作,根据所赋的值来决定其数据类型。
【例3-10】 在下面的代码中,定义了一个字符串类型的变量$a、整型变量$b 和布尔类型变量$c。
<?PHP
$a = "这是一个常量";
$b = 2;
$c = True
?>
例3-10的代码中都是将常量赋值到一个变量中。也可以将变量赋值给另外一个变量,例如:
<?PHP
$a = "这是一个常量";
$b = $a;
?>
此代码将变量$a的值赋予变量$b,但以后对变量$a的操作将不会影响到变量$b。
也就是说,变量$a只是将它的值传递给了变量$b。
【例3-11】 变量值传递的例子。
<?PHP
$a = "这是一个变量";
$b = $a;
echo($b); //此时变量 b 的值应等于变量a的值
echo("<BR>");
$a = "这是另一个变量";
echo($b); //对变量$a的操作将不会影响到变量$b
?>
运行结果如下:
这是一个变量
这是一个变量
可以看到,变量值传递后修改变量$a的值并没有影响到变量$b。图3-5所示为变量值传递的示意图。
图3-5 变量值传递的示意图
PHP 还提供一种变量间的地址传递操作,在赋值的变量前使用&符号可以表示地址传递。地址传递后,两个变量就有了相同的内存地址,相当于是同一个变量了。
【例3-12】 下面是一个变量地址传递的示例程序:
<?PHP
$a = 10;
$b = &$a;
$c = $a;
$a = 100;
echo("\$a=");
echo($a);
echo("<BR>");
echo("\$b=");
echo($b);
echo("<BR>");
echo("\$c=");
echo($c)
?>
程序首先定义了一个变量$a,将它赋值为10;将变量$a的地址传递给变量$b,值传递给变量$c;再修改变量$a的值为100,最后分别打印变量$a、$b和$c的值。在echo("\$c=");语句中,反斜杠“\”表示转义符号,如果不使用反斜杠符号,将在网页中直接输出变量$c的值。
运行结果如下:
$a=100
$b=100
$c=10
可以看到,变量$a的值变化影响到了地址传递的变量$b,而值传递的变量$c则保持其最初的值。图3-6所示为变量地址传递的示意图。
图3-6 变量地址传递的示意图
使用echo()函数可以输出变量的值,值为"4"的变量和值为4的变量输出结果是一样的。如果想输出变量的明细信息,可以使用var_dump()函数。此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。
【例3-13】 下面是使用var_dump()函数输出变量明细信息的例子。
<?php
$a = "100";
var_dump($a);
$b=100;
var_dump($b);
?>
输出的结果如下:
string '100' (length=3)
int 100
3.2.4 类型转换
PHP在定义变量时,不需要指定其数据类型,而是根据每次给变量所赋的值决定其数据类型。
【例3-14】 下面是一个类型转换的例子。
<?PHP
$a = 1;
$a = "变量a转换成字符串";
echo("<BR>");
echo($a);
?>
变量$a被赋值1,此时它是整型变量。然后将变量$a赋值为一个字符串,使用echo命令将其输出,此时变量$a变成字符串类型。运行结果如下:
变量a转换成字符串
【例3-15】 如果字符串变量的内容是数值,也可以在表达式中直接转换成数值类型,例如:
<?PHP
$a = "100";
$b = $a * 2;
echo($b);
?>
首先变量$a被赋值为"100",此时它是字符串类型。在$b =$a * 2语句中,因为字符串变量$a的内容是数值,所以会自动被转换成数值类型并参与计算,变量$b的值为200。
【例3-16】 如果一个内容不是数值的字符串变量出现在算术表达式中,则计算结果为0,例如:
<?PHP
$a = "abc";
$b = $a * 2;
echo($b);
?>
输出的结果为0。
也可以在变量前面添加数据类型,做强制类型转换。
【例3-17】 强制类型转换的例子。
<?PHP
$a = "5个人";
$b = (integer)$a * 2;
echo($b);
?>
在上面的代码中,使用(integer)将变量$a强制转换为整型,运行结果为10。
共有条评论 网友评论