目录
- 四种标量类型
- 三种复合类型
- 两种特殊类型
- 伪类型
- 伪变量
- 类型转换
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将对一些特殊的字符进行解析。
三种复合类型:
-
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() 函数。
关于类型的章节就到这里,数组成为了本章节的重点,对象放到类与对象章节深究,其它具体实践内容且看后续。