PHP数据与运算
常量
常量的定义和使用
常量就是在脚本运行过程中值始终不变的量。它的特点是一旦被定义就不能被修改或重新定义。例如,数学中的圆周率π就是一个常量,其值就是固定且不能被改变的。
PHP中常量的命名遵循标识符的命名规则,默认大小写敏感,习惯上常量名称总是使用大写字母表示。PHP提供了两种定义常量的方式,具体如下所示。
1.define()函数
define('PAI','3.14');define('R','5',true);echo '圆周率=',PAI; //输出结果:圆周率=3.14echo '<br>';echo '半径=',R; //输出结果:半径=5echo '<br>';echo '半径=',r; //输出结果:半径=5
在上述示例中,define()函数的第1个参数表示常量的名称;第2个参数表示常量值;第3个参数是可选的,用于指定常量名是否对大小写敏感,可设为true或false,省略时默认值为false。当设为true时,常量名对大小写不敏感,如上述示例中的R和r表示同一个常量。当设为false时,常量名对大小写敏感,PAI和pai表示两个不同的常量。
2.const关键字
const关键字在定义常量时,只需在其后跟上一个常量名称,并使用“=”进行赋值即可,具体示例如下所示。
const R = 6;const P = R * 2;echo 'P=',P; //输出结果:P=12
预定义常量
在PHP中,除了可自定义常量外,还提供了很多预定义常量。这些常量专门用于获取PHP中的信息,并且不允许开发人员随意修改。

需要注意的是,预定义常量FILE和LINE的书写,“_”是两条下划线,而不是一条““。
echo '当前文件路径为:',__FILE__; //输出:当前文件路径为:C:\Environment\phpstudy\WWW\study\php\test.phpecho '<br>';echo '当前PHP版本信息为:',PHP_VERSION; //输出:当前PHP版本信息为:7.3.4echo '<br>';echo '当前操作系统为:',PHP_OS; //输出:当前操作系统为:WINNT
变量
变量就是保存可变数据的容器。在PHP中,变量是由number、$_it为合法的变量名,而
*math为非法变量名。
1.变量的赋值
由于PHP是一种弱语言,变量不需要事先声明就可以直接进行赋值使用。为此,PHP提供了两种变量赋值方式,一种是默认的传值赋值,另一种是引用赋值。具体示例如下。
1.传值赋值
变量默认总是传值赋值,将“=”右边的数据赋值给左边的变量。
$number = 10; //定义变量$number,并且赋值为10$result = $number; //定义变量$result,并将$number的值赋值给$result$number = 100; //将$number的值修改为100echo '$number=',$number; //输出:$number=100echo '<br>';echo '$result=',$result; //输出:$result=10
2.引用赋值
所谓引用赋值就是在要赋值的变量前添加“&”符号。
$number = 10; //定义变量$number,并且赋值为10$result = &$number; //定义变量$result,并将$number的值引用赋值给$result$number = 100; //将$number的值修改为100echo '$number=',$number; //输出:$number=100echo '<br>';echo '$result=',$result; //输出:$result=100
当变量result的值也随之变为100。这是由于引用赋值的方式相当于给变量起一个别名,当一个变量的值发生改变时,另一个变量也随之变化。
2.可变变量
在PHP中,为了方便在开发时动态地改变一个变量的名称,提供了一种特殊的变量用法,可变变量。通过可变变量,可以将另外一个变量的值作为该变量的名称。
$a = 'say';$say = 'Hello';$Hello = 'Lucy';echo $a,'-',$$a,'-',$$$a; //输出:say-Hello-Lucy
从上述代码可知,可变变量的实现很简单,只需在一个变量前多加一个美元符号“a的值是数字,则可变变量$$a就会出现非法变量名的情况。因此,开发时可变变量的运用,请酌情考虑。
表达式
在PHP中,任何有值的内容都可以理解为表达式。如图所示。

数据类型及转换
1.数据类型
程序开发中经常需要操作数据,而每个数据都有其对应的类型。PHP中支持3种数据类型,分别为标量数据类型、复合数据类型及特殊数据类型,PHP中所有的数据类型如图所示。

1.布尔型
布尔型是PHP中较常用的数据类型之一,通常用于逻辑判断。它只有true和false两个值,表示事物的“真”和“假”,并且不区分大小写。
2.整型
整型可以由十进制、八进制和十六进制数指定,用来表示整数。在它前面加上“-”符号,可以表示负数。其中,八进制数使用0~7表示,且数字前必须加上0;十六进制数使用0~9与A~F表示,数字前必须加上0x,具体示例如下。
$a = 1234; // 十进制数echo $a; //输出结果:1234echo '<br>';$b = 0123; // 八进制数 (等于十进制 83)echo $b; //输出结果:83echo '<br>';$c = 0x1A; // 十六进制数 (等于十进制 26)echo $c; //输出结果:26echo '<br>';$d = 0b11111111; // 二进制数字 (等于十进制 255)echo $d; //输出结果:255
若给定的数值大于系统环境的整型所能表示的最大范围时,会发生数据溢出,导致程序出现问题。例如,32位系统的取值范围是-231~231-1。通过常量PHP_INT_MAX可获取当前环境的整型最大值。
3.浮点型
浮点数是程序中表示小数的一种方法。在PHP中,通常使用标准格式和科学计数法格式表示浮点数,具体示例如下。
$fnum1 = 5.59; //标准格式$fnum1 = -7.43; //标准格式$fnum1 = 3.14E6; //科学计数法格式3.14*10^6$fnum1 = 4.46E-3; //科学计数法格式4.46*10^-3
在上述格式中,不管采用哪种格式,浮点数的有效位数都是14位。其中,有效位数指的是从最左边第一个不为0的数字开始,直到末尾数字的个数,且不包括小数点。
4.字符串型
字符串是由连续的字母、数字或字符组成的字符序列。PHP提供了4种表示字符串的方式,分别为单引号、双引号、heredoc语法结构和nowdoc语法结构。
1.单引号和双引号
$number = 100;echo '$number=',$number; //输出:$number=100echo '<br>';echo "$number=",$number; //输出:100=100
从图中可知,变量$number在双引号字符串中被解析为它的值100,而在单引号字符串中原样输出。
另外,在单引号和双引号字符串中要使用一些特殊符号,则需要使用转义字符“\”对其进行转义。其中,单引号字符串只对“’”和“\”进行转义;而双引号字符串支持多种转义字符。
2.heredoc和nowdoc语法结构
heredoc和nowdoc的语法结构都是以“<<<”开始,后面紧跟标识符名称,结束时所引用的标识符名称与开始标识符名称要相同,且必须在该行的第一列,以分号结尾。其中,heredoc和nowdoc结构的语法区别是开始标识符名称,前者没有引号,后者必须要使用单引号进行包裹。
$name = 'php';$heredoc = <<<EOD<ul><li>$name 是世界上最好的语言!</li> //输出:php 是世界上最好的语言!</ulEOD;echo $heredoc;$nowdoc = <<<'EOD'<ul><li>$name 是世界上最好的语言!</li> //输出:$name 是世界上最好的语言!</ulEOD;echo $nowdoc;
此外,heredoc结构的字符串会解析其中的变量,nowdoc结构中的变量会被原样输出,由此可见,它们的功能分别与双引号和单引号字符串类似。
2.数据类型检测
PHP中变量的数据类型通常不是开发人员设定的,而是根据该变量使用的上下文在运行时决定的,如下代码演示了变量的数据类型变化。
$a = 1;var_dump($a); //输出:int(1)$a = $a + 2.0;var_dump($a); //输出:float(3)
为了检测表达式的值是否符合期望的数据类型,PHP提供了一组is_*()的内置函数,括号里的参数为待要检测的值。如果检测的值符合检测的数据类型,则返回true,否则返回false。

3.数据类型转换
在PHP中,对两个变量进行操作时,若其数据类型不相同,则需要对其进行数据类型转换。通常情况下,数据类型转换分为自动类型转换和强制类型转换,下面对这两种数据类型转换进行详细介绍。
1.自动类型转换
所谓自动类型转换,指的是当运算需要或与期望的结果类型不匹配时,PHP将自动进行类型转换,无需开发人员做任何操作。在程序开发过程中,最常见的自动类型转换有3种,分别为转换成布尔型、转换成整型和转换成字符串型。在各个类型进行自动转换时需要注意以下几点。
- 转换成布尔类型值时,整型值0、浮点型值0.0、空字符串以及字符串“0”都会被转为false,其他值会被转为true。
- 尔型转换成整型时,布尔值true转换成整数1;布尔值false转换成整数0。
- 浮点数转换成整数时,将向下取整。
- 字符串型转换为整型时,若字符串是以数字开始,则使用该数值,否则转换为0。
- 布尔型转换成字符串时,布尔值true转换成字符串“1”;布尔值false转换成空字符串。
- 整型或浮点型转换成字符串时,直接将数字转换成字符串形式。

2.强制类型转换
所谓强制类型转换,就是在编写程序时手动转换数据类型,在要转换的数据或变量之前加上“(目标类型)”即可。
| 强转类型 | 功能描述 |
|---|---|
| (bool) | 强转为布尔型 |
| (string) | 强转为字符串型 |
| (int) | 强转为整型 |
| (float) | 强转为浮点型 |
| (array) | 强转为数组 |
| (object) | 强转为布尔型对象 |
