PHP数据与运算

常量

常量的定义和使用

常量就是在脚本运行过程中值始终不变的量。它的特点是一旦被定义就不能被修改或重新定义。例如,数学中的圆周率π就是一个常量,其值就是固定且不能被改变的。

PHP中常量的命名遵循标识符的命名规则,默认大小写敏感,习惯上常量名称总是使用大写字母表示。PHP提供了两种定义常量的方式,具体如下所示。

1.define()函数

  1. define('PAI','3.14');
  2. define('R','5',true);
  3. echo '圆周率=',PAI; //输出结果:圆周率=3.14
  4. echo '<br>';
  5. echo '半径=',R; //输出结果:半径=5
  6. echo '<br>';
  7. echo '半径=',r; //输出结果:半径=5

在上述示例中,define()函数的第1个参数表示常量的名称;第2个参数表示常量值;第3个参数是可选的,用于指定常量名是否对大小写敏感,可设为true或false,省略时默认值为false。当设为true时,常量名对大小写不敏感,如上述示例中的R和r表示同一个常量。当设为false时,常量名对大小写敏感,PAI和pai表示两个不同的常量。

2.const关键字

const关键字在定义常量时,只需在其后跟上一个常量名称,并使用“=”进行赋值即可,具体示例如下所示。

  1. const R = 6;
  2. const P = R * 2;
  3. echo 'P=',P; //输出结果:P=12

预定义常量

在PHP中,除了可自定义常量外,还提供了很多预定义常量。这些常量专门用于获取PHP中的信息,并且不允许开发人员随意修改。

2.PHP数据与运算 - 图1

需要注意的是,预定义常量FILELINE的书写,“_”是两条下划线,而不是一条““。

  1. echo '当前文件路径为:',__FILE__; //输出:当前文件路径为:C:\Environment\phpstudy\WWW\study\php\test.php
  2. echo '<br>';
  3. echo '当前PHP版本信息为:',PHP_VERSION; //输出:当前PHP版本信息为:7.3.4
  4. echo '<br>';
  5. echo '当前操作系统为:',PHP_OS; //输出:当前操作系统为:WINNT

变量

变量就是保存可变数据的容器。在PHP中,变量是由2.PHP数据与运算 - 图2number、$_it为合法的变量名,而2.PHP数据与运算 - 图3*math为非法变量名。

1.变量的赋值

由于PHP是一种弱语言,变量不需要事先声明就可以直接进行赋值使用。为此,PHP提供了两种变量赋值方式,一种是默认的传值赋值,另一种是引用赋值。具体示例如下。

1.传值赋值

变量默认总是传值赋值,将“=”右边的数据赋值给左边的变量。

  1. $number = 10; //定义变量$number,并且赋值为10
  2. $result = $number; //定义变量$result,并将$number的值赋值给$result
  3. $number = 100; //将$number的值修改为100
  4. echo '$number=',$number; //输出:$number=100
  5. echo '<br>';
  6. echo '$result=',$result; //输出:$result=10

2.引用赋值

所谓引用赋值就是在要赋值的变量前添加“&”符号。

  1. $number = 10; //定义变量$number,并且赋值为10
  2. $result = &$number; //定义变量$result,并将$number的值引用赋值给$result
  3. $number = 100; //将$number的值修改为100
  4. echo '$number=',$number; //输出:$number=100
  5. echo '<br>';
  6. echo '$result=',$result; //输出:$result=100

当变量2.PHP数据与运算 - 图4result的值也随之变为100。这是由于引用赋值的方式相当于给变量起一个别名,当一个变量的值发生改变时,另一个变量也随之变化。

2.可变变量

在PHP中,为了方便在开发时动态地改变一个变量的名称,提供了一种特殊的变量用法,可变变量。通过可变变量,可以将另外一个变量的值作为该变量的名称。

  1. $a = 'say';
  2. $say = 'Hello';
  3. $Hello = 'Lucy';
  4. echo $a,'-',$$a,'-',$$$a; //输出:say-Hello-Lucy

从上述代码可知,可变变量的实现很简单,只需在一个变量前多加一个美元符号“2.PHP数据与运算 - 图5a的值是数字,则可变变量$$a就会出现非法变量名的情况。因此,开发时可变变量的运用,请酌情考虑。

表达式

在PHP中,任何有值的内容都可以理解为表达式。如图所示。

2.PHP数据与运算 - 图6

数据类型及转换

1.数据类型

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

2.PHP数据与运算 - 图7

1.布尔型

布尔型是PHP中较常用的数据类型之一,通常用于逻辑判断。它只有true和false两个值,表示事物的“真”和“假”,并且不区分大小写。

2.整型

整型可以由十进制、八进制和十六进制数指定,用来表示整数。在它前面加上“-”符号,可以表示负数。其中,八进制数使用0~7表示,且数字前必须加上0;十六进制数使用0~9与A~F表示,数字前必须加上0x,具体示例如下。

  1. $a = 1234; // 十进制数
  2. echo $a; //输出结果:1234
  3. echo '<br>';
  4. $b = 0123; // 八进制数 (等于十进制 83)
  5. echo $b; //输出结果:83
  6. echo '<br>';
  7. $c = 0x1A; // 十六进制数 (等于十进制 26)
  8. echo $c; //输出结果:26
  9. echo '<br>';
  10. $d = 0b11111111; // 二进制数字 (等于十进制 255)
  11. echo $d; //输出结果:255

若给定的数值大于系统环境的整型所能表示的最大范围时,会发生数据溢出,导致程序出现问题。例如,32位系统的取值范围是-231~231-1。通过常量PHP_INT_MAX可获取当前环境的整型最大值。

3.浮点型

浮点数是程序中表示小数的一种方法。在PHP中,通常使用标准格式和科学计数法格式表示浮点数,具体示例如下。

  1. $fnum1 = 5.59; //标准格式
  2. $fnum1 = -7.43; //标准格式
  3. $fnum1 = 3.14E6; //科学计数法格式3.14*10^6
  4. $fnum1 = 4.46E-3; //科学计数法格式4.46*10^-3

在上述格式中,不管采用哪种格式,浮点数的有效位数都是14位。其中,有效位数指的是从最左边第一个不为0的数字开始,直到末尾数字的个数,且不包括小数点。

4.字符串型

字符串是由连续的字母、数字或字符组成的字符序列。PHP提供了4种表示字符串的方式,分别为单引号、双引号、heredoc语法结构和nowdoc语法结构。

1.单引号和双引号
  1. $number = 100;
  2. echo '$number=',$number; //输出:$number=100
  3. echo '<br>';
  4. echo "$number=",$number; //输出:100=100

从图中可知,变量$number在双引号字符串中被解析为它的值100,而在单引号字符串中原样输出。

另外,在单引号和双引号字符串中要使用一些特殊符号,则需要使用转义字符“\”对其进行转义。其中,单引号字符串只对“’”和“\”进行转义;而双引号字符串支持多种转义字符。

2.heredoc和nowdoc语法结构

heredoc和nowdoc的语法结构都是以“<<<”开始,后面紧跟标识符名称,结束时所引用的标识符名称与开始标识符名称要相同,且必须在该行的第一列,以分号结尾。其中,heredoc和nowdoc结构的语法区别是开始标识符名称,前者没有引号,后者必须要使用单引号进行包裹。

  1. $name = 'php';
  2. $heredoc = <<<EOD
  3. <ul>
  4. <li>$name 是世界上最好的语言!</li> //输出:php 是世界上最好的语言!
  5. </ul
  6. EOD;
  7. echo $heredoc;
  8. $nowdoc = <<<'EOD'
  9. <ul>
  10. <li>$name 是世界上最好的语言!</li> //输出:$name 是世界上最好的语言!
  11. </ul
  12. EOD;
  13. echo $nowdoc;

此外,heredoc结构的字符串会解析其中的变量,nowdoc结构中的变量会被原样输出,由此可见,它们的功能分别与双引号和单引号字符串类似。

2.数据类型检测

PHP中变量的数据类型通常不是开发人员设定的,而是根据该变量使用的上下文在运行时决定的,如下代码演示了变量的数据类型变化。

  1. $a = 1;
  2. var_dump($a); //输出:int(1)
  3. $a = $a + 2.0;
  4. var_dump($a); //输出:float(3)

为了检测表达式的值是否符合期望的数据类型,PHP提供了一组is_*()的内置函数,括号里的参数为待要检测的值。如果检测的值符合检测的数据类型,则返回true,否则返回false。

2.PHP数据与运算 - 图8

3.数据类型转换

在PHP中,对两个变量进行操作时,若其数据类型不相同,则需要对其进行数据类型转换。通常情况下,数据类型转换分为自动类型转换和强制类型转换,下面对这两种数据类型转换进行详细介绍。

1.自动类型转换

所谓自动类型转换,指的是当运算需要或与期望的结果类型不匹配时,PHP将自动进行类型转换,无需开发人员做任何操作。在程序开发过程中,最常见的自动类型转换有3种,分别为转换成布尔型、转换成整型和转换成字符串型。在各个类型进行自动转换时需要注意以下几点。

  • 转换成布尔类型值时,整型值0、浮点型值0.0、空字符串以及字符串“0”都会被转为false,其他值会被转为true。
  • 尔型转换成整型时,布尔值true转换成整数1;布尔值false转换成整数0。
  • 浮点数转换成整数时,将向下取整。
  • 字符串型转换为整型时,若字符串是以数字开始,则使用该数值,否则转换为0。
  • 布尔型转换成字符串时,布尔值true转换成字符串“1”;布尔值false转换成空字符串。
  • 整型或浮点型转换成字符串时,直接将数字转换成字符串形式。

2.PHP数据与运算 - 图9

2.强制类型转换

所谓强制类型转换,就是在编写程序时手动转换数据类型,在要转换的数据或变量之前加上“(目标类型)”即可。

强转类型 功能描述
(bool) 强转为布尔型
(string) 强转为字符串型
(int) 强转为整型
(float) 强转为浮点型
(array) 强转为数组
(object) 强转为布尔型对象