PHP入门系列(二)——数据类型

目录

  • 四种标量类型
  • 三种复合类型
  • 两种特殊类型
  • 伪类型
  • 伪变量
  • 类型转换
PHP 共支持 9 种原始数据类型:

四种标量类型:

  • boolean(布尔型)

要指定一个布尔值,使用常量 TRUE 或 FALSE。
两个都不区分大小写。

<?php
$a=true;
$b=false;
?>
  • integer(整型)

整数是一个没有小数的数字,即a = {..., -2, -1, 0, 1, 2, ...} 。
整型可以用三种格式来指定:十进制, 十六进制(前缀0x),八进制(前缀0)或二进制(前缀0b,PHP 5.4.0 起可用)

<?php
$a = 1234; // 十进制数
$a = -123; // 负数
$a = 0123; // 八进制数 (等于十进制 83)
$a = 0x1A; // 十六进制数 (等于十进制 26)
$a = 0b11111111; // 二进制数字 (等于十进制 255)
?>

warning:PHP 7 以前的版本里,如果向八进制数传递了一个非法数字(即 8 或 9),则后面其余数字会被忽略。PHP 7 以后,会产生 Parse Error。

  • float(浮点型,也称作 double)

浮点型(也叫浮点数 float,双精度数 double 或实数 real)

<?php
$a = 1.234; 
$b = 1.2e3; 
$c = 7E-10;
?>
  • string(字符串)

字符串可以用 4 种方式表达:
单引号、双引号、heredoc 语法结构、nowdoc 语法结构(自 PHP 5.3.0 起)
既然是入门系列,这里简单提及,大家习惯性使用前两种吧。
在单引号字符串和nowdoc语法结构中的变量和特殊字符的转义序列将不会被替换。
在双引号字符串和heredoc语法结构中,PHP将对一些特殊的字符进行解析。


string

三种复合类型:

  • array(数组)

PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。

可以用 array() 语言结构来新建一个数组。它接受任意数量用逗号分隔的 键(key) => 值(value)对。

最后一个数组单元之后的逗号可以省略。通常用于单行数组定义中,例如常用 array(1, 2) 而不是 array(1, 2, )。对多行数组定义通常保留最后一个逗号,这样要添加一个新单元时更方便。

短数组定义语法:

<?php
$array = array(
    "a" => "1",
    "b" => "2",
);
// 自 5.4 起可以使用短数组定义语法,用 [] 替代 array()。
$array = [
    "a" => "3",
    "b" => "4",
];
?>

基本赋值方法:

<?php
$array = [
    "a" => 1,
    "a" => 2,  //多次赋值会覆盖
    "b" => 3,
    400 => 4,  //允许多种类型并行
    5,         //允许仅部分赋值
    6,         //key为可选项。如未指定,将自动使用之前用过的最大 integer 键名加上 1 作为新的键名。
];
var_dump($array);
?>

#输出
array(5) { ["a"]=> int(2) ["b"]=> int(3) [400]=> int(4) [401]=> int(5) [402]=> int(6) }

增删改查基本语法:

<?php
$array = [    "a" => 1,    "a" => 2,    "b" => 3,    400 => 4,    5,    6,];
$array["c"]=666;    //增
$array["a"]=9;      //改
echo $array["a"];   //查
unset($array["b"]); //删
$array = array_values($array);  //重建索引,因为有删除操作
echo count($array); //查询数目
?>

#输出
95

foreach 控制结构是专门用于数组的。它提供了一个简单的方法来遍历数组。

<?php
$array = [    "a" => 1,    "a" => 2,    "b" => 3,    400 => 4,    5,    6,];
foreach ($array as $v){
    echo $v;
}
unset($v);
echo "<br>";
foreach ($array as $k => $v) {
    echo $k,':',$v,"\n";
}
unset($k,$v);
?>

#输出
23456
a:2 b:3 400:4 401:5 402:6

数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留。建议使用unset()来将其销毁。

  • object(对象)

使用 new 语句实例化一个类,即创建一个新的对象 object,本章节我们不做展开。

  • callable(可调用)

自 PHP 5.4 起可用 callable 类型指定回调类型 callback。
一些函数如 call_user_func() 或 usort() 可以接受用户自定义的回调函数作为参数。回调函数不止可以是简单函数,还可以是对象的方法,包括静态类方法。

function demo(){
    $array = [    "a" => 1,    "a" => 2,    "b" => 3,    400 => 4,    5,    6,];
    foreach ($array as $k => $v) {
        echo $k,':',$v,"\n";
    }
    unset($k,$v);
}
call_user_func('demo');  //call_user_func(),把第一个参数作为回调函数调用
echo "<br>";
demo();

#输出
a:2 b:3 400:4 401:5 402:6 
a:2 b:3 400:4 401:5 402:6

这里我也求助了php大佬,使用回调函数跟直接使用有什么区别?大佬回复是便于封装。emmmm,暂留疑惑,像大佬低头。

两种特殊类型:

  • resource(资源)

资源 resource 是一种特殊变量,保存了到外部资源的一个引用,资源是通过专门的函数来建立和使用的。按照大佬的解释,一切文本、数据库等提供的数据都算资源类型,我™,PHP真的反人类!

  • NULL(无类型)

特殊的 NULL 值表示一个变量没有值。NULL类型唯一可能的值就是 NULL
在下列情况下一个变量被认为是NULL:被赋值为 NULL、尚未被赋值、被unset()。


为了确保代码的易读性,PHP还提供了伪类型&伪变量

伪类型

  • mixed(混合类型)

mixed 说明一个参数可以接受多种不同的(但不一定是所有的)类型。
例如 gettype() 可以接受所有的 PHP 类型,str_replace() 可以接受字符串和数组。

  • number(数字类型)

number 说明一个参数可以是 integer 或者 float。

  • callback(回调类型,又称为 callable)

在 PHP 5.4 引入 callable 类型之前使用了 callback 伪类型。二者含义完全相同。

  • array|object(数组 | 对象类型)

array|object 意思是参数既可以是 array 也可以是 object。

  • void (无类型)

void 作为返回类型意味着函数的返回值是无用的。void 作为参数列表意味着函数不接受任何参数。

伪变量

在函数原型中,$... 表示等等的意思。当一个函数可以接受任意个参数时使用此变量名。


类型转换

和python一样,PHP属于弱类型语言,这就意味着一个变量的类型会随着赋值不断发生改变。但PHP支持类型强转换,PHP 中的类型强制转换和 C 中的非常像,在要转换的变量之前加上用括号括起来的目标类型。

允许的强制转换有:
(int), (integer) - 转换为整形 integer
(bool), (boolean) - 转换为布尔类型 boolean
(float), (double), (real) - 转换为浮点型 float
(string) - 转换为字符串 string
(array) - 转换为数组 array
(object) - 转换为对象 object
(unset) - 转换为 NULL (PHP 5)

Tips:
如果想查看某个表达式的值和类型,用 var_dump() 函数。
如果想得到一个易读懂的类型的表达方式用于调试,用 gettype() 函数。

关于类型的章节就到这里,数组成为了本章节的重点,对象放到类与对象章节深究,其它具体实践内容且看后续。

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

推荐阅读更多精彩内容

  • php usleep() 函数延迟代码执行若干微秒。 unpack() 函数从二进制字符串对数据进行解包。 uni...
    思梦PHP阅读 1,984评论 1 24
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,167评论 0 3
  • 1.认识php php是服务端嵌入到HTML中的脚本语言。php的功能包括但不限于: 收集表单数据 生成动态网页 ...
    楠哥哥_0b86阅读 843评论 3 1
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,113评论 0 21
  • 今天是平常的三月的一天,昨天还有些寒冷的天,今天突然就热了起来,很热。有些人甚至换上了短袖,看下日历,正月二十五,...
    扶苏二大爷阅读 153评论 0 0