PHP基本数据类型

每一种编程语言都有基本数据类型的处理方法,PHP也是这样,下面我们就先来看一看PHP有哪些常用的基本数据类型。

基本数据类型

整数

PHP中的整数定义为有符号整数,但取值范围与平台有关,如在32位环境中,它就是一个32位的有符号整数;而在64环境中,就是64位有符号整数。

本书大部分示例中都使用了64位的操作系统和PHP环境,所以,我们可以认为PHP环境下的整数为64位有符号整数,其取值范围为-264到264-1。

除了十进制整数,PHP中同样可以使用十六进制(0x前缀)和八进制(0前缀),如:

  • 0x1F,表示十六进制数1F。
  • 0123,表示八进制数123。

浮点数

PHP中的浮点数取值范围同样与平台有关,一般为64位浮点数。

NULL值

NULL值表示没有数据,这与数据库中的NULL值的含义是相同的。

布尔类型

布尔类型数据的值只能是true或false。当其它类型的值转换为布尔类型数据时,会遵循以下基本规则:

  • 整数转换为布尔型,只有0转换为false值,其它数值都会转换为true值。
  • 浮点数转换为布尔型,只有0.0转换为false值,其它数值都转换为true值。
  • NULL值转换为布尔型,始终为false值。

由于布尔类型只支持true和false值,所以,它们的运算也相对比较简单,如:

  • &&或and运算符,进行左右两个操作数的“与”运算,只有两个操作数都是true值时,运算结果才为true值,否则运算结果为false。如true && false结果为false,而true && true结果为true。
  • ||或or运算符,进行左右两个操作数的“或”运算,当两个操作数中的一个为true时,运算结果就是true;只有两个操作数都是false时,运算结果才是false值。
  • !运算符,取反运算。!true为false值,!false为true值。
  • xor,进行左右两个操作数的异或运算。当两个操作数不同时,运算结果为true,相同时运算结果为false。如true xor true结果为false,而true xor false结果为true。

需要注意的是“与”运算和“或”运算,它们都具有“短路”功能。在“与”运算中,如果左操作数为false,则不会计算右操作数,而是直接返回false值;而在“或”运算中,如果左操作数为true,则不会计算右操作数,而是直接返回true。实际应用中,我们可以将主要或重要的判断条件放在左操作数,这样有助于提高代码的运行效率。

此外,请注意NULL值与false值,当你使用“false == NULL;”语句,结果会是true;但是,我们知道false值和NULL值的含义是不同的,所以,当你使用“false === NULL”语句时会返回false,即它们不是全等的。

变量

PHP与C、C++、C#、Java等语言最大的不同在于,使用PHP变量时不需要事先声明,比如,在C语言中声明变量i并赋值为1时,会使用如下代码:

int i = 1;

而在PHP中,只需要使用如下代码:

$i = 1;

在PHP中,变量都使用$符号开始,后面的命名规则就与其它编程语言差不多了,即使用字母或下划线开头,然后由字母、下划线或数字组成。 我们可看到,在使用变量时,并没有指定变量的类型,那么,在运行当中,它是怎么工作的呢?答案是,PHP变量会根据赋予的值来判断类型,如1被认为是整数、1.0被认为是浮点数等。

此外,在调试过程中有一个非常实用的var_dump()函数,它的作用就是显示变量的类型与值信息,此函数可以有一个或多个参数,如:

$intVal = 1;  
$floatVal = 1.1;  
$boolVal = true;  
var_dump($intVal, $floatVal, $boolVal);

其显示信息为“int(1) float(1.1) bool(true)”。

在使用变量前,我们可使用isset()语句结构判断变量是否存在或者是否包含有效数据(非NULL值),如:

$i = 1;  
$j = NULL;  
var_dump(isset($i)); // bool(true)  
var_dump(isset($j)); // bool(false)  
var_dump(isset($k)); // bool(false)

与isset()语句结构相关的语句还有:

  • unset()语句结构,取消变量的定义并自动释放其所占内存(如果可以的话)。
  • empty()语句结构,当变量没有定义或为null值时,返回true值;当参数中包含有效数据时返回false,此函数与isset()函数的功能正好相反。

常量

在PHP中定义常量时,可以使用define()函数或const语句,其中,define()函数是在代码运行时创建全局常量,这些常量可以在其所定义文件或引用此文件的页面中使用,其格式如下:

define(<常量名>,<常量值>,<是否忽略大小写>);

其中:

  • <常量名>,指定常量名称,习惯用法是使用C常量风格,即所有字母大写,单词间使用下划线分隔。本书中将使用这一风格。
  • <常量值>,指定常量的值。
  • <是否忽略大小写>,这是一个可选参数,如果不指定此参数,则默认为true,即在常量使用时忽略字母的大小写。

下面就是一个常量应用的代码:

define("MAX_NUMBER", 100);  
echo MAX_NUMBER; // 显示100

如果我们需要判断一个常量是否已定义,可以使用defined()函数,如:

define("MAX_NUMBER", 100);  
var_dump(defined("MAX_NUMBER")); // 显示 bool(true);

const语句一般在类(class)中定义常量,用于模拟枚举类型,我们会在介绍面向对象编程时介绍。

类型判断

PHP中定义了一系列的数据类型判断函数,它们的返回结果都是布尔类型(true或false),常用的包括:

  • is_integer()、is_int()和is_long()函数,判断参数是不是一个整数。
  • is_double()、is_float()和is_real()函数,判断参数是不是一个浮点数。
  • is_null()函数,判断参数是否为NULL值。
  • is_bool()函数,判断参数是否为布尔类型。
  • is_string()函数,判断参数是否为字符串类型。
  • is_array()函数,判断参数是否为数组。稍后介绍数组相关内容。
  • is_scalar()函数,当参数为整数、浮点数、字符串或布尔类型值时返回true,否则返回false。
  • is_numeric()函数,参数可以转换为数值时返回true,否则返回false。

此外,我们还可以使用gettype()函数直接获取参数的数据类型名称,如下面的代码。

$val = true;  
echo gettype($val);  // 显示 boolean

类型转换

数据类型转换前,我们可以使用前面介绍的类型判断函数做一些测试工作,当我们需要将一个值转换为另外一个类型时,有几种基本的方法可以使用:

第一种方法是使用settype()函数,其中,参数一为原值,参数二为目标类型,使用字符串形式的类型名称。如下面的代码:

$val = '123';  
echo gettype($val);  
echo '<br>';  
settype($val,'integer');  
echo gettype($val);

代码显示结果如下图。

PHP基本数据类型

我们可以看到,使用settype()函数实际上是修改变量自身的类型,如果我们不修改变量自身类型,而是需要一个类型转换后的数据,可以使用与C风格相似的转换方法,即在需要转换的数据前使用小括号包含目标类型名称,如下面的代码。

$val = '123';  
echo gettype($val);  
echo '<br>';  
$num = (int)$val;  
echo gettype($num);

本代码显示结果与上图是一样的。

在PHP中,还有第三种方法可以用于数据类型转换,即使用相应类型的转换函数,如:

  • intval()函数,将参数一转换为整数,参数二为可选,用于指定原数据的进制,默认为十进制,函数将返回转换后的整数数据,如果转换失败则返回0。
  • floatval()函数,将参数转换为浮点数,函数将返回转换后的浮点型数据,如果转换失败则返回0。
  • strval()函数,将参数转换为字符串形式。
  • boolval()函数,将参数转换为布尔类型。

下面的代码演示了这几个函数的使用。

$str = 'F';  
$num = intval($str,16);  
var_dump($num);  // int(15),十六进制数F转换为十进制数15  
var_dump(floatval($str)); // float(0)  
var_dump(strval($num));  // string(2)"15"  
var_dump(boolval($str)); // bool(true)

此外,关于浮点数,我们可以使用round()函数确定它的小数位,对于多出的小数位,会进行四舍五入操作,如果指定的小位数多于原数小数位,则会显示原数值。如下面的代码:

echo round(2.125, 1); // 显示2.1  
echo '<br>';  
echo round(2.125, 2); // 显示2.13  
echo '<br>';  
echo round(2.125, 4); // 显示2.125

另外一个常用的格式化数值的函数是number_format(),它会返回一个格式化后的字符串,其定义如下:

string number_format(<原值>, <小数位>, <整数与小数分隔符>, <千位分隔符>)

下面的代码演示了常用的几种方法:

$val = 123456.92789;  
echo number_format($val);  // 显示123,457  
echo '<br>';  
echo number_format($val, 2);  // 显示123,456.93  
echo '<br>';  
echo number_format($val, 4, '.', ',');  // 显示123,456.9279  
echo '<br>';  
echo number_format($val, 3, '.', '');  // 显示123456.928

代码中分别使用了四个number_format()函数:

  • number_format($val),使用一个参数,指定需要转换的数值,默认情况下会对小数部分进行四舍五入,使用逗号作为千位分隔符。
  • number_format($val, 2),使用两个参数,其中参数二为需要保留的小数位,其余部分进行四舍五入,使用逗号作为千位分隔符。
  • number_format($val, 4, ‘.’, ‘,’),使用四个参数,参数三设置整数部分与小数的分隔符,参数四设置逗号作为千位分隔符。
  • number_format($val, 3, ‘.’, ”),使用四个参数,参数三设置整数部分与小数的分隔符,参数四设置千位分隔符为空,即不使用千位分隔符。

关于数据类型的转换,我们不得不提的是PHP中强大的自动转换功能,如使用print或echo语句显示内容时,无论你指定显示的是什么类型的内容,这两个语句都能自动将这些内容转换成文本内容并显示。不过,这并不包括没有定义__toString()方法的对象。

在实际应用中,我们应该多思考,并进行相应的测试工作,以掌握PHP在数据类型转换中的灵活性,同时,也要注意转换过程中可能出现的问题。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程