02_PHP 数据类型

1. PHP 数据类型


PHP的数据类型主要分为三大类:

  • 标量数据类型
    • String(字符串)
    • Integer(整型)
    • Float(浮点型)
    • Boolean(布尔型)
  • 复合数据类型
    • Array(数组)
    • Object(对象)
  • 特殊数据类型
    • resource(资源)
    • NULL(空值)

标量数据类型是数据结构中最基础的单元,只能存储一个数据。

1.1. String(字符串)

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

① 单引号和双引号区别如下。

  • ""双引号里面的变量会经过编译器解析,然后再输出。
  • ''单引号里面的变量不进行解析,直接输出,因此单引号比双引号执行得要快了。

例如:

$number= 100;
echo '$number=', $number; //结果是:$number=100
echo "$number=", $number; //结果是:100=100

说明
: 在定义字符串时,如果没有特别的要求,应尽量使用单引号。

  • 对转义字符的使用

双引号中可以通过“\”转义符输出的特殊字符如下:

转义序列 字符
\n 换行符
\r 回车符
\t 制表符Tab
\\ 反斜杠
\$ 美元符号
\" 双引号

单引号中可以通过“\”转义符输出的特殊字符只有:

转义序列 字符
\\ 反斜杠
\' 单引号

②heredoc和nowdoc语法结构(定界符<<<)

heredoc和nowdoc的语法结构都是:

以“<<<”开始,
后面紧跟开始标识符名称,
结束时所引用的标识符名称与开始标识符名称要相同,以分号结尾。

<<<STR
//内容
STR;

heredoc和nowdoc结构的使用具有以下几个特点:

  • 开始标记和结束标记使用相同的字符串,通常以大写字母来写。
  • 开始标记后不能出现空格或多余的字符。
  • 结束标记必须顶头写,不能有缩进和空格。
  • heredoc结构中的变量会被解析,变量不需要用连接符“.”来拼接。

heredoc和nowdoc结构的语法区别是:

  • 开始标识符名称,heredoc没有引号,nowdoc必须要使用单引号进行包裹。
  • heredoc结构中的变量会被解析,类似双引号;nowdoc结构中的变量会被原样输出,类似单引号。
<?php
$name = 'PHP';
$heredoc = <<<EOD
<p>$name 是世界上最好的语言!</p>
EOD;
echo $heredoc;   //输出:PHP 是世界上最好的语言!
$nowdoc = <<<'EOD'
<p>$name 是世界上最好的语言!</p>
EOD;
echo $nowdoc;  //输出:$name 是世界上最好的语言!
?>

字符串操作详细见字符串章节

1.2. Integer(整型)

整型数据只能包含整数。

整型数据的规则是:

  • 整型数据必须至少有一个数字(0~9)。
  • 整型数据不能包含逗号或空格。
  • 整型数据没有小数点。
  • 整型数据可以是正数或负数。

整型数据可以用3种格式来指定,
即十进制、十六进制(前缀为0x)和八进制(前缀为0)。

$oct = 012;  //八进制
$dec = 10;   //十进制
$hex = 0xa;  //十六进制

注意,在PHP 7版本中,含有十六进制字符的字符串不再被视为数字,而是当作普通的字符串。

1.3. Float(浮点型)

浮点型数据既可以用来存储整数,也可以用来存储小数和指数。

<?php
$num = 3.14;
?>

1.4. Boolean(布尔型)

布尔型数据只有两个,即true和false,布尔型变量通常用于条件判断语句中。

其他的数据类型基本都有布尔属性:

数据类型 true false
整型 非0 0
浮点型 非0 0.0
字符串型 非空非零 ''空字符串或'0'字符串
数组型 包括元素 不含任何元素
对象型 永远为true
资源型 永远为true
NULL型 永远为false

1.5. Array(数组)

数组是一系列数据集合起来形成的一个可操作的整体,一系列数据可以包括标量数据、对象、资源以及PHP中支持的其他语法结构等。

一般把数组中的单个数据称为元素,元素又被分为索引(键名)和值两部分。
索引(键名)可以是数字或者字符串,值可以是任何数据类型。

在PHP中,通常使用array()创建数组或直接赋值。准确来说,array()是一种结构而不是一个函数,具体格式如下:

$array1 = array('val1','val2','val3'...);
$array2 = array(key1 => 'val1', key2 => 'val2', key3 => 'val3',...);
$array[key1] = 'val1';

数组具体详细见数组章节

1.6. Object(对象)

编程语言所应用到的方法有两种:面向过程和面向对象。在PHP中,用户可以自由使用这两种方法。

对象数据类型也可以用于存储数据。在PHP中,对象必须声明。首先,你必须使用class关键字声明类对象。类是可以包含属性和方法的结构。然后在类中定义数据类型,在实例化的类中使用数据类型。

1.7. resource(资源)

资源是一种特殊的变量类型,又叫作句柄,它是通过专门的函数来创建和使用的。资源可以被进行操作,如创建、使用和释放等。任

何资源,在不需要的时候都应该被及时释放。系统也会自动启用垃圾回收机制,在页面执行完毕后回收资源,以避免内存被消耗殆尽。

在编程过程中,资源类型却是几乎永远接触不到的。

1.8. NULL(空值)

空值,顾名思义,表示没有为该变量设置任何值。

被赋予空值的情况有以下3种:

  • 还没有赋任何值
  • 被赋值null
  • 被unset()函数处理过的变量。

1.9. 数据类型检测

PHP内置了检测数据类型的系列函数,可以对不同类型的数据进行检测,判断其是否属于某个类型,如果符合则返回true,否则返回false。

检测数据类型的函数如表:

函数 检测类型 举例
is_bool() 是否为布尔类型 is_bool(srue) , is_bool(false)
is_string() 是否为字符串型 is_string(‘string’) , is_string(1234)
is_float()/is_double() 是否为浮点型 is_float(3.1415) , is_float(‘3.1415’)
is_integer()/is_int() 是否为整型 is_integer(34) , is_integer(‘34’)
is_null() 是否为空值 is_null(null)
is_array() 是否为数组 is_array($arr)
is_object() 是否为一个对象 is_object($obj)
is_numeric() 是否为数字或由数字组成的字符串 is_numeric(‘5’) , is_numeric(‘bcc110’)
<?php 
    $boo = '0123456';
    if(is_numeric($boo))
        echo 'yes!';
    else
        echo 'no!';    
?>

1.10. 数据类型获取

1.如果想查看某个表达式的值和类型,用var_dump()。
2.如果只是想得到一个易读懂的类型的表达方式用于调试,用 getType()。
3.要查看某个类型,不要用 gettype(),而用is_type() 函数。

1.11. 数据类型转换

PHP虽然是弱类型语言,但有时也需要用到类型转换。在PHP数据类型的转换主要有以下2种转换方式。

1.11.1. 自动类型转换

所谓自动类型转换,指的是当运算需要或与期望的结果类型不匹配时,PHP将自动进行类型转换,无需开发人员做任何操作。

在程序开发过程中,最常见的自动类型转换有3种,分别为转换成布尔型、转换成整型和转换成字符串型。在各个类型进行自动转换时需要注意以下几点。

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

1.11.2. 强制类型转换

所谓强制类型转换,就是在编写程序时手动转换数据类型,主要有以下三种转换方式。

1)在要转换的变量之前加上用括号括起来的目标类型。这种方法只需在变量前面加上用括号括起来的类型名称即可,允许转换的类型如表:

函数 检测类型 举例
(int),(integer) 转换成整型 (int)str,(integer)boo
(bool),(boolean) 转换成布尔 (bool)num,(boolean)str
(float),(double),(real) 转换成浮点 (float)$str
(string) 转换成字符 (string)$boo
(array) 转换成数组 (array)$str
(object) 转换成对象 (object)$str

2)使用三个具体类型的转换函数,intval()、floatval()、strval()。其中,intval()函数用于转换为整型,floatval()函数用于转换为浮点型,strval()函数用于转换为字符型。


3)使用函数settype()进行转换。settype()函数用于设置变量的数据类型,该函数可以将指定的变量转换成指定的数据类型。

bool settype (mixed $var,string type)


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容