赵工的个人空间


专业技术部分转网页计算转业余爱好部分


 编程语言

常用的编程语言
C#编程语言基础
C#面向对象与多线程
C#数据及文件操作
JavaScript基础
JavaScript的数据类型和变量
JavaScript的运算符和表达式
JavaScript的基本流程控制
JavaScript的函数
JavaScript对象编程
JavaScript内置对象和方法
JavaScript的浏览器对象和方法
JavaScript访问HTML DOM对象
JavaScript事件驱动编程
JavaScript与CSS样式表
Ajax与PHP
ECMAScript6的新特性
Vue.js前端开发
PHP的常量与变量
PHP的数据类型与转换
PHP的运算符和优先规则
PHP程序的流程控制语句
PHP的数组操作及函数
PHP的字符串处理与函数
PHP自定义函数
PHP的常用系统函数
PHP的图像处理函数
PHP类编程
PHP的DataTime类
PHP处理XML和JSON
PHP的正则表达式
PHP文件和目录处理
PHP表单处理
PHP处理Cookie和Session
PHP文件上传和下载
PHP加密技术
PHP的Socket编程
PHP国际化编码
MySQL数据库基础
MySQL数据库函数
MySQL数据库账户管理
MySQL数据库基本操作
MySQL数据查询
MySQL存储过程和存储函数
MySQL事务处理和触发器
PHP操作MySQL数据库
数据库抽象层PDO
Smarty模板
ThinkPHP框架
Python语言基础
Python语言结构与控制
Python的函数和模块
Python的复合数据类型
Python面向对象编程
Python的文件操作
Python的异常处理
Python的绘图模块
Python的NumPy模块
Python的SciPy模块
Python的SymPy模块
Python的数据处理
Python操作数据库
Python网络编程
Python图像处理
Python机器学习
TensorFlow深度学习
Tensorflow常用函数
TensorFlow用于卷积网络
生成对抗网络GAN


首页 > 专业技术 > 编程语言 > PHP的数据类型与转换
PHP的数据类型与转换

变量是用来存储数据的,都有一个名称和一个值。数据类型决定了如何将这些值存储到计算机的内存中。PHP按照数据类型值的范围可以分为标量数据类型、复合数据类型和特殊数据类型。

1.变量数据类型:

标量数据类型只能包含单一数据类型的数据。PHP支持4种标量数据类型。

1)布尔型:

布尔型表示数据的真或者假,只有true和false两个值。这两个值不区分大小写,也可以用0表示false,非0值表示true。

2)整型:

整型就是一个不包含小数部分的数。整型可以用十进制、十六进制或八进制指定,并且前面还可以加上“+”号或“-”号。如果用八进制符号,数字前面必须加上0,用十六进制符号,数字前面必须加上0x。
PHP所能支持的最大整数与平台有关,一般是php。如果超过了此限制,将自动转换为浮点数。

3)浮点型:

浮点型数据也称为单精度数、双精度数或实数,可以指定包含小数部分的数。浮点数适用于表示货币值、重量、距离,以及用简单的整数无法满足要求的其他数据。

计算机内部处理浮点数的方式决定了浮点数不可能完全精确,特别是比较两个浮点数时容易出现问题。比较浮点数的两种方法,第一种方法是带上相同的精度的小数位,一般使用intval函数;第二种是使用BC Math函数。BC Math函数见下表:


函数名

功能

bcadd()

将两个高精度数字相加

bccomp()

比较两个高精度数字,返回-1,0,1

bcdiv()

将两个高精度数字相除

bcmod()

求高精度数字的余数

bcmul()

将两个高精度数字相乘

bcpow()

求高精度数字的乘方

bcpowmod()

求高精度数字乘方求模,数论中常用

bcscale()

为这些函数配置默认的小数点位数

bcsqrt()

求高精度数字的平方根

bcsub()

将两个高精度数字相减

4)字符串型:

PHP中的字符串是很多字符的组合,或者说是一个连续的字符数组。
要创建一个字符串,最简单的方法是用单引号(')括起来,在字符串中用反斜线(\)转义表示一个单引号。也可以使用双引号(")表示字符串,这时要注意其中的变量名会被变量值替代。示例:
echo 'that\'s very good'; //输出:that's very good
echo "she's a teacher"; //输出:she's a teacher
echo "快捷方式位于D:\桌面\游戏.exe"; //输出:快捷方式位于D:\桌面\游戏.exe
$birthday="8月8日";
echo '$birthday是他的生日'; //输出:$birthday是他的生日
echo "他的生日是$birthday"; //输出:他的生日是8月8日
如果在单引号之前或字符串结尾需要出现一个反斜线,需要用两个反斜线表示。注意,如果试图转义任何其他字符,反斜线本身也会被显示出来,所以通常不需要转义反斜线本身。

PHP支持的转义字符表:


序列

含义

序列

含义

\n

换行

\\

反斜线

\r

回车

\$

美元符号

\t

水平制表符

\"

双引号

2.复合数据类型:

复合数据类型可以把多种相同类型的信息组合在一起。PHP支持数组和对象两种复合数据类型。

1)数组类型:

数组是具有相同数据类型的项集合,按照特定的方式进行排列和引用。在PHP中,可以通过数组的键名(keys)加上数组名称来获得。示例:
<?php
  //使用索引创建数组
  $books[0]="轻松学PHP";
  $books[1]="PHP入门";
  $books[5]="PHP学习手册";
  //使用键创建数组
  $bands["lenovo"]="联想";
  $bands["byd"]="比亚迪";
  $bands["icbc"]="中国工商银行";
?>

2)对象类型:

要创建一个对象,首先要创建一个类,类需要用class关键字定义。创建好类后便可以使用new关键字实例化类的对象,然后再访问对象的属性、方法和成员等。示例:
<?php
class Book {
  var $name="PHP编程基础";
  var $price=30.5;
  var $pub="电子工业出版社";
}
$php=new Book();
echo "当前正在阅读由$php->pub出版的$php->name";
echo "\n此书定价为$php->price元";
?>

3.特殊数据类型:

PHP还支持一些用在特殊方面的数据类型,主要提供某种特殊用途。

1)资源类型:

资源是一种特殊的变量,保存了一个到外部资源的引用。例如,数据库、文件和网路流等。资源是通过专门的函数来建立和使用的,它们将保持对资源的引用,直到通信结束才撤销。
当不使用资源时,资源将作为垃圾被收集起来。资源类型的变量并不真正保存一个值,实际上只保存一个指针,指向所打开的资源类型的变量,在使用时直接调用指针即可。如果输出其内容,将看到一个资源ID号的引用。

2)空类型:

空类型的变量只有一个NULL值,仅仅表示没有任何值,不表示空格,也不表示零。一个变量在下列几种情况下会被认为是NULL值:
·被赋值为NULL。
·没有被赋值。
·使用unset()函数清除。
空类型的值不区分大小写,因此NULL和null是等效的。
测试一个变量是否为空,使用函数is_null()

4.数据类型转换:

1)数据类型自动转换:

当变量需要在不同的数据类型间操作时,需要转换为同一种类型,这一过程称为类型转换。PHP支持自动转换和强制转换两种方式。
自动转换是指由PHP根据变量所处的环境,自动将变量转换为最合适的类型。算术运算要求操作数都是数字,所以会将操作数自动转换为数字型。字符串变量当用到条件语句时会自动转换为布尔型,不为零的值为true。

2)数据类型强制转换:

强制类型转换是指显示地把一种数据类型强制地转换成另外一种数据类型。经过转换的变量,将以新的类型进行计算。转换的格式是在要转换的变量前面加上要转换的类型,如表:


转换运算符

转换结果

(array)

数组类型

(bool)或(boolean)

布尔值类型

(int)或(integer)

整数类型

(object)

对象类型

(real)或(double)或(float)

浮点数类型

(string)

字符串类型

(array)

数组

当从数据类型范围大的向数据类型范围小的转换时,不能进行自动转换,必须使用强制类型转换,例如把一个数从浮点型转换为整型。示例:
$num1=19.82;
$num2=(int)num1;
任何一种数据类型都可以转换为对象,转换后就成为该对象的一个属性,属性名为scalar,可以通过对象名引用该属性。

3)类型转换的方法:

①转换为整型
·逻辑值false产生0,true产生1
·浮点数转换成整数时,数字被取整(抛弃小数位)
·如果浮点数超出了整数范围(通常为±2.15e+9),则结果不确定,而且没有通知
·字符串转换,参考后面将字符串转换为数值的说明
·从其他类型转换,先转换为逻辑值,而后转换为整型
②转换为逻辑值:
以下值被转换为false:
·逻辑值false
·整型值0
·浮点型值0.0
·空白字符串和字符串"0"
·没有成员变量的数组
·没有成员的对象(仅适用于PHP4)
·特殊类型NULL(包括尚未设定的变量)
·从没有任何元素的XML文档生成SimpleXML对象
其他值被转换为true。
③转换为浮点数:
·从字符串转换,参考后面关于将字符串转换为数值的说明
·对其他类型的值,先将值转换成整型,然后再转换为浮点型
④字符串转换:
·逻辑值true将被转换为字符串"1",而值false将被表示为""(空串)
·整型或浮点型数值在转换为字符串时,字符串由表示这些数值的数字字符组成
·数组将被转换成字符串"Array",因此无法通过输出函数输出数组内容
·对象被转换成字符串"Object"
·资源类型总是以"Resource id#1"的格式被转换成字符串,其中1是PHP指定的标识
·NULL将被转换成空串
⑤转换为数组:
·将一个值转换为数组,将得到一个仅有一个元素的数组,下标为0,该元素为此标量的值
·将一个对象转换成一个数组,得到的数组的元素为该对象的属性,其键名为成员变量
·将NULL转换为数组,将得到一个空数组
⑥转换为对象:
·将其他任何类型的值转换成对象,内置类stdClass的实例将被建立,如果该值为NULL,新的实例为空
·数组转换成对象将使键名成为属性名并具有相对应的值
·对于任何其他值,名为scalar的成员变量将包含该值
示例:
<?php
$obj=(object)'myName';
echo $obj->scalar;
?>
⑦字符串转换为数值:
·该值由字符串最前面的部分决定,如果字符串以合法的数字数据开始,就用该数字作为其值,否则其值为0
·合法数字数据由可选的正负号开始,后面跟着一个或多个数字(包括十进制分数),再后面跟着可选的指数。指数是一个e或E后面跟着一个或多个数字
示例:
<?php
$foo=1+"10.5"; // $foo=float(11.5)
$foo=1+"-1.3e3"; // $foo=float(-1299)
$foo=1+"bob3"; // $foo=integer(1)
$foo=1+"10 Small Pigs"; // $foo=integer(1)
$foo=4+"10.2 Liittle Piggies"; // $foo=float(14.2)
$foo="10.0 pigs"+1; // $foo=float(11)
?>

4)与数据类型有关的函数:

PHP还提供用于完成类型之间转换功能的函数。
①gettype()函数:
函数gettype()用于获取指定变量的数据类型,并以字符串形式返回。语法格式:
string gettype (mixed $var)
该函数只有一个参数,指定要获取数据类型的变量。示例:
$strVar=gettype($money);
②settype()函数:
函数settype()可以将变量强制转换为指定的数据类型。语法格式:
string settype (mixed $var, string $type)
如果转换成功将返回true,否则返回false。示例:
$result=settype($long, "integer");
③其他类型转换函数:
·doubleval():floatval的别名
·floatval():获取变量的浮点值
·intval():获取变量的整数值
·strval():获取变量的字符串值
其中,intval()还可以用来在不同进制之间转换,语法格式:
 int intval(mixed $val[, int $base])
如果不定义参数$base,则默认转换为十进制整数;如果定义了参数$base,则参数$var必须是一个字符串,否则参数$base不起作用。
④类型检测函数:
PHP的类型检测函数有很多,使用它们可以检测变量是不是属于指定的数据类型。最常用的类型检测函数有:is_array()、is_bool()、is_float()、is_int()、is_null()、is_numeric()、is_object()、is_resource()、is_scalar()和is_string()。这些函数的语法格式相同,并且返回值全部是布尔值。
例如:
bool is_string(mixed $var)
该函数返回的是布尔值,如果为string类型则返回true,否则返回false。
⑤empty函数:
判断变量是否为空,语法格式:
boolean empty(mixed $var);
""、0、"0"、NULL、false、array()、未赋初始值的变量以及没有任何属性的对象都将被认为是空的。如果参数$var为空,则该函数返回true。
⑥isset()和unset()函数
使用isset()检测变量是否声明,经常用于条件语句。示例:
if (!isset($myVar)) {
  echo '$myVar 尚未定义';
}
也可以使用该函数来检测数组中是否存在指定的元素。示例:
if (!isset($myArray["天干"])) {
  echo '$myArray 不存在"天干"元素';
}
isset()也可以一次检测多个变量或数组元素。语法格式:
void isset(mixed $var[, mixed $var[, $...]])
在检测多个变量时,仅有这些变量都存在时才返回true。
如果变量或者数组元素不再使用,那么应该及时释放它们所占的内存资源,可以通过unset()函数来实现。unset()可以销毁指定的变量,并且可以一次销毁多个变量。语法格式:
void unset(mixed $var[, mixed $var[, $...]])

Copyright@dwenzhao.cn All Rights Reserved   备案号:粤ICP备15026949号
联系邮箱:dwenzhao@163.com  QQ:1608288659