![PHP程序设计](https://wfqqreader-1252317822.image.myqcloud.com/cover/826/47133826/b_47133826.jpg)
2.1 PHP变量
变量是用来临时存储值的容器,这些值可以是数字、文本以及更复杂的排列组合等。变量又是指在程序的运行过程中随时可以发生变化的量,是程序中数据的临时存放场所。变量能够把在程序中准备使用的每一段数据都赋予一个简短、易于记忆的名字,因此非常有用。
另外,PHP是一种弱类型的程序语言。在大多数编程语言中,变量只能存储一种类型的数据,而且这个类型还必须在使用变量前声明,例如C语言中。而在PHP中,变量的类型通常不是由程序员设定的,而是根据该变量所赋值的类型决定的。
2.1.1 变量的声明
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/17_01.jpg?sign=1739318787-minWTuuOj0sn9gApc2e3ywh6lmKjkpRi-0-0cff03c492ac16f174edcb3ebf856737)
2.1.1
在PHP中用户可以声明并使用变量,但并不要求在使用变量之前一定要声明变量,当第一次给一个变量赋值时,就创建了这个变量。PHP的变量声明必须以一个“$”符号开始,后面再跟上一个变量名。变量名的命名规则如下。
● 变量名必须以字母或者下画线开头,后面可以跟上任意数量的字母、数字或者下画线,中间不能有空格。
● 变量名严格区分大小写。
● 不要使用PHP的系统关键字作为变量名,例如:echo、die、exit、case等。
● 变量名应尽量表达出清晰的含义,通常由一个或多个简单的英文单词构成。如果是由一个单词构成的,通常采用全部小写的风格;如果是由多个单词构成的,则第一个单词采用全部小写,后面的每个单词的首字母采用大写的风格。
【示例2-1】 声明变量。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/18_01.jpg?sign=1739318787-xkQoJVS9nnccL5drgCa9OBdwAJMQDfwj-0-a098dcc2ac24f1fd95fd63f718801444)
2.1.2 可变变量
可变变量允许用户动态地改变一个变量的名称,其工作原理就是用一个变量的值作为另一个变量的名称。
【示例2-2】 声明可变变量。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/18_02.jpg?sign=1739318787-fXzQUF5PvRcdNaxSKhPQqFF5hjd7AQE4-0-70afeb84944a17ac93685fecc2fa9940)
示例2-2的执行结果如图2-1所示。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/18_03.jpg?sign=1739318787-4XTgzIQSRw6uyxCFqZ14tsxkdM7NMmHF-0-29d9a468bab16217c5b8d22c83f6d0bd)
图2-1 声明可变变量
说明:在以上示例中,声明了一个可变变量$$var,$var的值是name,相当于给$name赋值为“张华”。
2.1.3 变量的类型
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/18_04.jpg?sign=1739318787-Q8VefVYIah4QEdU9a0671PMj9jFxEnj3-0-934734c268c0cfb192fa07d2b889962e)
2.1.3
变量的类型是指保存在该变量中的数据类型。PHP提供了一个完整的数据类型集,可以将不同的数据保存在不同的数据类型中。
1.数据类型
PHP支持如下所示的数据类型。
● 整型(integer):用来表示整数。
● 浮点型(float或double):用来表示所有实数。
● 布尔型(boolean):用来表示true或者false。
● 字符串类型(string):用来表示字符串。
● 数组类型(array):用来保存数组。
● 对象类型(object):用来保存类的实例。
● 资源类型(resource):用来保存对外部资源的引用。
● NULL类型:用来表示特殊值NULL。
(1)整型(integer)
整型变量用以存储整数。整型数据除了常用的十进制数以外,还可以使用十六进制(数字前加“0x”)或八进制(数字前加“0”)数表示;整型数据也可以使用“+”或者“-”开头表示数据的正负,其中“+”可以省略。
整数数据有最大的使用范围,这与平台有关,对于32位系统而言,整型数据的范围为:-2 147 483 648~2 147 483 647。PHP不支持无符号整数,如果超出了integer这个范围,则会解释为float类型。
【示例2-3】 声明整型变量。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/19_01.jpg?sign=1739318787-fqHyAuJhF43x3OnCnHvpEiYPk031TY8f-0-fa374f738ce7c55e391a1f0fceede0d8)
(2)浮点型(float或double)
浮点数(也叫双精度数或实数)是包含小数部分的数。通常用来表示整数无法表示的数据,例如,金额值、距离值、速度值等。浮点数的字长也和平台相关,64位浮点数通常最大值为1.8e308,并具有14位十进制数字的精度。
浮点数只是一种近似的数值,所以不要比较两个浮点数是否相等。
【示例2-4】 声明浮点型变量。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/19_02.jpg?sign=1739318787-qDFRAn0jPZGQtb8PKwGgDwW4Yxen8uOR-0-91cb871dd22c094096b81fd12e2c2ece)
(3)布尔型(boolean)
布尔型是最简单的数据类型,用以表达true或false,即“真”或“假”。要给变量指定一个布尔值,使用关键字true或false,两个都不区分大小写。
当其他类型转换为布尔型时,以下值被认为是false。
● 布尔值false。
● 整型值0。
● 浮点型值0.0。
● 空白字符串和字符串“0”。
● 没有成员变量的数组。
● 特殊类型NULL(包括尚未赋值的变量)。
除了以上列出的值以外,所有其他值都被认为是true(包括任何资源)。
【示例2-5】 声明布尔型变量。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/19_03.jpg?sign=1739318787-WnemnVqxxa3RfNsBTjPZSLsoz3u6iqpX-0-8725c164c97110f9c23c7a2d17fa2d56)
(4)字符串类型(string)
一个字符串是由一系列的字符组成的,在PHP中,一个字符串可以只是一个字符,也可以由任意多个字符组成。PHP没有给字符串的大小强制设定范围,因此不必担心字符串的长度。字符串可以使用单引号(')或者双引号(")进行定义。
① 单引号。
指定一个简单字符串的最简单的方法是使用一对单引号(' ')括起来。在单引号字符串中出现的变量不会被变量的值替代,即PHP不会解析单引号中的变量,而是将变量名原样输出。
【示例2-6】 声明字符串型变量(使用单引号)。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/20_01.jpg?sign=1739318787-BNRW7K4qSfnq92uTuRz4A6lTCKVLsqU9-0-d63d09551ebfc17644bf30e90276e612)
示例2-6的执行结果如图2-2所示。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/20_02.jpg?sign=1739318787-absaaHSf8UcuscSRVjXHEe9uYZ6TDI7X-0-bb94c3dee68d1a28d92cd692b0ec9b5f)
图2-2 声明字符串型变量(使用单引号)
说明:在定义简单字符串时,使用单引号的效率会更高,因为PHP不会在解析变量上产生开销。因此,如果没有特别需求,应使用单引号定义字符串。
② 双引号。
也可以把一个字符串用一对双引号(" ")括起来。双引号字符串最重要的一点是其中的变量名会被变量值替代,即可以解析双引号中包含的变量。
包含在双引号字符串中的变量在被解析时,必须要保证该变量与字符串中的其他内容是分离的,例如通过空格进行隔开,或者用一对花括号({})括起来,以表示一个表达式。
【示例2-7】 声明字符串型变量(使用双引号)。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/20_03.jpg?sign=1739318787-fjHNlZipg4UIQuwiRZvleOhAAEjtz8vP-0-a8ed841444bc13cd2ff7a45b351bde56)
示例2-7的执行结果如图2-3所示。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/20_04.jpg?sign=1739318787-yg4znDK7hgQhOEiEegP6GaeFLwR9UkTD-0-33eabe6a933be7b5e06d02791bbad6d8)
图2-3 声明字符串型变量(使用双引号)
说明:PHP不仅仅可以解析双引号中的变量,还可以解析数组值、对象属性和方法等。
另外,如果要输出的字符串中包含单引号('),则把该字符串包含在一对双引号(" ")中;如果要输出的字符串中包含双引号("),则把该字符串包含在一对单引号(' ')中;如果要输出的字符串中既包含单引号('),又包含双引号("),则需要利用转义字符(\)进行转义,例如:(\')(\")。
【示例2-8】 声明字符串型变量(使用单、双引号)。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/21_01.jpg?sign=1739318787-eXnaCRCpOZHUP0sa54w8H7MsBSC1nknO-0-855c3b6f09944ffcfa554e50641c8e40)
示例2-8的执行结果如图2-4所示。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/21_02.jpg?sign=1739318787-4gSOAguVjhrfC2daoZzi3X9ekQGPqWhD-0-a5b7c50fdde70b3ec0ad653934834fcf)
图2-4 声明字符串型变量(使用单、双引号)
(5)数组类型(array)
PHP中的数组是一种重要的复合数据类型,可以存放多个数据,而且是可以存放任何类型的数据。数组的声明和使用将在第3章中做详细介绍。
(6)对象类型(object)
PHP中的对象与数组一样,也是一种复合数据类型,但对象是一种更高级的数据类型。一个对象类型的变量,是由一组属性值和一组方法构成,其中属性值表明对象的一种状态,而方法通常用来表明对象的功能。对象的创建和使用将在第8章中做详细介绍。
(7)资源类型(resource)
资源是一种特殊变量,保存了对外部资源的一个引用。资源是通过专门的函数来建立和使用的。使用资源类型变量保存诸如打开文件、数据库连接、图形画布区域等的特殊句柄,由程序员创建、使用和释放。任何资源在不需要时都应该被及时释放,如果忘记了释放资源,系统将自动启用垃圾回收机制,以避免内存被消耗殆尽。
(8)NULL类型
NULL类型唯一可能的值就是NULL。NULL不表示空字符串,也不表示零,而是表示一个变量的值为空。NULL不区分大小写。下列情况下的一个变量会被认为是NULL。
● 被赋值为NULL值的变量。
● 尚未被赋值的变量。
● 被unset()函数销毁的变量。
2.检测变量
可以使用以下函数来检测变量的类型。
● is_bool():判断是否为布尔型。
● is_int()、is_integer()、is_long():判断是否为整型。
● is_float()、is_double()、is_real():判断是否为浮点型。
● is_string():判断是否为字符串。
● is_array():判断是否为数组。
● is_object():判断是否为对象。
● is_resource():判断是否为资源类型。
● is_null():判断是否为NULL。
● is_numberic():判断是否是任何类型的数字和数字字符串。
另外,使用var_dump()、gettype()、isset()和empty()等函数也可以实现类似的功能,下面将做详细介绍。
(1)var_dump()函数
var_dump()函数可以用来查看变量的值和类型。其语法格式如下。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/22_01.jpg?sign=1739318787-Y5ROXk3csXF7u2qWWBLmtUYVGklspxQG-0-92df54a54ffce46a6b23abd19b762ba0)
【示例2-9】 var_dump()函数。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/22_02.jpg?sign=1739318787-jO07yznx6PKny2veuBjW2AziTyHLGTzf-0-372a319ab8ad3ba1a4350ee49566fbdb)
示例2-9的执行结果如图2-5所示。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/22_03.jpg?sign=1739318787-3YQXCECyZykk5LaxSmH0aTPOZHXzmdEI-0-9cdcf0fc9b0b7414f8b80ebb61b601c3)
图2-5 var_dump()函数
(2)gettype()函数
gettype()函数可以用来获取变量的类型。其语法格式如下。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/22_04.jpg?sign=1739318787-6VvbHvKJVMW1XP0nPjg8CBjvdKyc7eQo-0-7cd69b510e2b105a3850e392b0d87354)
【示例2-10】 gettype()函数。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/22_05.jpg?sign=1739318787-uYz42DqqMZNciUf3RbSbMpVwSLpHNRlD-0-7f1a8e3ca7d03d75db1e4bcd56424b49)
示例2-10的执行结果如图2-6所示。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/22_06.jpg?sign=1739318787-Tz9co1Dj87o2fstEkJeMqd6UbmzdNqqO-0-9ca20f17535054d7446cdaee31ffa8f2)
图2-6 gettype()函数
(3)isset()和empty()函数
isset()函数可以用来检测变量是否已设置,如果检测的变量值存在,则返回true;否则返回false。其语法格式如下。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/22_07.jpg?sign=1739318787-fZMpg6E28GO9toERsdVqdCuf7lsdbp7O-0-8c746f9951bb415696049a2546aad123)
empty()函数可以用来检查变量是否为空。如果检查的变量是非空或非零的值,则返回false;如果是空字符串("")、0、"0"、null、false、array()、声明但未赋值的变量等,则返回true。其语法格式如下。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/23_01.jpg?sign=1739318787-k8HShZsVcdwT9xFhUIGROKuOlZIEuhhw-0-9f7c61186bc25584d49d1d72aad5b6e6)
【示例2-11】 isset()和empty()函数。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/23_02.jpg?sign=1739318787-0sjnYYF7gmIF2bD4GOCxrxYQpt4pQXBe-0-d8d2227fd5e480ca717916fa0fa617d8)
示例2-11的执行结果如图2-7所示。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/23_03.jpg?sign=1739318787-DJ3QvtaP4KkHk53NeVvQGP6aA5055YMc-0-2173966cb61a11da34e54c875c901cb2)
图2-7 isset()和empty()函数
3.销毁变量
使用unset()函数可以在内存中释放指定的变量。其语法格式如下。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/23_04.jpg?sign=1739318787-wcbD1RbDpbDjljrIjMXbWdT34EoJQxD5-0-eb4576074d4634880c9231390ff9faa0)
【示例2-12】 unset()函数。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/23_05.jpg?sign=1739318787-YOJAcNt5PMfJlDZ6VljL3nwR80Hc1T8B-0-ce4e4c29b22af232885441738a5f3125)
示例2-12的执行结果如图2-8所示。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/23_06.jpg?sign=1739318787-mHkr52vishaQTFS2yjBxVgeOP8ly09xG-0-3beb4a17b0ea19f93378661dc8c3975c)
图2-8 unset()函数
2.1.4 数据类型转换
类型转换是指将变量或值从一种数据类型转换成其他数据类型。转换的方法有两种:一种是自动转换,另一种是强制转换。在PHP中可以根据变量或值的使用环境自动将其转换为最合适的数据类型,也可以根据需要强制转换为用户指定的类型。
1.自动类型转换
只有具有相同类型的数据才能彼此操作。在PHP中,自动转换通常发生在不同数据类型的变量进行混合运算的时候。如果参与运算变量的类型不同,则需要首先转换成同一类型,然后再进行运算,其运算后的结果也是相同的类型。通常只有integer、float、boolean和string类型能进行自动类型转换。
自动类型转换虽然是由系统自动完成的,但在混合运算时,自动转换要遵循转换按数据长度增加的方向进行,以保证精度不降低。
● 有布尔值参与运算时,true将转换为整型1,false将转化为整型0后再参与运算。
● 有NULL值参与运算时,NULL值将转换为整型0再参与运算。
● 有integer型和float型的值参与运算时,先把integer型变量转换成float类型后再参与运算。
● 有字符串和数值型(integer、float)数据参与运算时,字符串先转换为数字,再参与运算。转换后的数字是从字符串开始的数值型字符串,如果在字符串开始的数值型字符串不带有小数点,则转换为integer类型的数字;如果带有小数点,则转换为float类型的数字。
【示例2-13】 自动类型转换。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/24_01.jpg?sign=1739318787-BQa9FmQL5sWVdqwZufOLbDwFh0pCgmlS-0-1ec66eafe95912d2ea5148b2281d3aa3)
2.强制类型转换
可以在要转换的变量之前加上用括号括起来的目标类型。使用括号允许的强制类型转换如下。
● (int)、(integer):转换成整型。
● (bool)、(boolean):转换成布尔型。
● (float)、(double)、(real):转换成浮点型。
● (string):转换成字符串。
● (array):转换成数组。
● (object):转换成对象。
【示例2-14】 强制类型转换。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/24_02.jpg?sign=1739318787-syH1tjCa9qjEppmSXDrYciqAQtbH27nB-0-1958754b0a0c01c225b7aa68404b9cbb)
另外,使用settype()、intval()、floatval()和strval()等函数也可以实现类型的强制转换,下面将做详细介绍。
(1)settype()函数
settype()函数可以用来将变量转换成指定的数据类型。其语法格式如下。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/24_03.jpg?sign=1739318787-C2qBw1OAyAUnZ0wCACUSNW8nVkGuz5jQ-0-a4599000f96a3834922d7b86e22e4781)
说明:
● 参数type为指定的数据类型。参数type有7个可选值,分别为:boolean、float、integer、array、null、object和string。如果转换成功则返回true,否则返回false。
● 该函数是直接在原字符串上进行的类型转换。
【示例2-15】 settype()函数。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/25_01.jpg?sign=1739318787-khv7ofAY5OrdnXmoPwFHtqnFJYbzDXrh-0-940e567fbf592d802ec29c20b85826a7)
(2)intval()、floatval()和strval()函数
intval()函数可以用来获取变量的整数值;floatval()函数可以用来获取变量的浮点数值;strval()函数可以用来获取变量的字符串值。其语法格式如下。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/25_02.jpg?sign=1739318787-EqU6Tdd8F51Oq62ebVN2Ap7o31GVkvOb-0-01079eb51a816867fa4151a0c533079c)
说明:
● intval()函数中的参数base为指定转化所使用的进制,默认是十进制。
● 若是浮点型转换为整型,将自动舍弃小数部分,只保留整数部分。
【示例2-16】 intval()、floatval()和strval()函数。
![](https://epubservercos.yuewen.com/A3974F/26479921501019706/epubprivate/OEBPS/Images/25_03.jpg?sign=1739318787-ZOXEjeesM7HScjZtHcPHiAnWoY4lD9bh-0-b46993ae32fdeb0c0708f4c34a9b1502)