Appearance
4.4 数据类型:字符串、整数、浮点数、布尔、数组、null
PHP 是一种弱类型语言,但它仍然支持多种数据类型。本文将介绍 PHP 中常见的数据类型及其使用方法。
1. 字符串 (string)
字符串是 PHP 中最常用的数据类型之一,用于存储文本数据。
1.1 定义字符串
php
// 单引号字符串
$str1 = 'Hello, World!';
// 双引号字符串
$str2 = "Hello, World!";
// 定界符字符串
$str3 = <<<EOD
This is a
multiline string
EOD;
// 现在文档(PHP 5.3+)
$str4 = <<<'EOD'
This is a
multiline string
EOD;1.2 字符串操作
php
// 字符串连接
$str1 = "Hello, ";
$str2 = "World!";
$str3 = $str1 . $str2; // "Hello, World!"
// 字符串长度
$length = strlen($str3); // 13
// 字符串查找
$pos = strpos($str3, "World"); // 7
// 字符串替换
$new_str = str_replace("World", "PHP", $str3); // "Hello, PHP!"
// 字符串截取
$sub_str = substr($str3, 0, 5); // "Hello"
// 字符串转换
$lower = strtolower($str3); // "hello, world!"
$upper = strtoupper($str3); // "HELLO, WORLD!"1.3 字符串插值
php
// 双引号中的变量插值
$name = "John";
echo "Hello, $name!"; // "Hello, John!"
// 复杂表达式插值
echo "1 + 2 = ${1 + 2}"; // "1 + 2 = 3"
// 数组元素插值
$user = ["name" => "John"];
echo "Hello, {$user['name']}!"; // "Hello, John!"2. 整数 (int)
整数是没有小数部分的数字。
2.1 定义整数
php
// 十进制整数
$int1 = 123;
// 十六进制整数
$int2 = 0x7B; // 123
// 八进制整数
$int3 = 0173; // 123
// 二进制整数
$int4 = 0b1111011; // 1232.2 整数范围
- PHP_INT_MIN:最小整数
- PHP_INT_MAX:最大整数
- PHP_INT_SIZE:整数大小(字节)
php
echo PHP_INT_MIN; // 输出最小整数
echo PHP_INT_MAX; // 输出最大整数
echo PHP_INT_SIZE; // 输出整数大小3. 浮点数 (float)
浮点数是带有小数部分的数字。
3.1 定义浮点数
php
// 普通浮点数
$float1 = 123.45;
// 科学计数法
$float2 = 1.2345e2; // 123.45
$float3 = 1.2345e-2; // 0.0123453.2 浮点数精度
php
// 浮点数精度问题
$a = 0.1;
$b = 0.2;
$c = $a + $b;
echo $c; // 可能输出 0.30000000000000004
// 解决方法
$c = round($a + $b, 1);
echo $c; // 输出 0.34. 布尔值 (bool)
布尔值表示真或假。
4.1 定义布尔值
php
$bool1 = true;
$bool2 = false;4.2 布尔转换
以下值会被转换为 false:
false0(整数)0.0(浮点数)""(空字符串)"0"(字符串 "0")nullarray()(空数组)
其他值都会被转换为 true。
php
// 布尔转换示例
var_dump((bool) 0); // bool(false)
var_dump((bool) ""); // bool(false)
var_dump((bool) "0"); // bool(false)
var_dump((bool) null); // bool(false)
var_dump((bool) array()); // bool(false)
var_dump((bool) 1); // bool(true)
var_dump((bool) "hello"); // bool(true)
var_dump((bool) array(1)); // bool(true)5. 数组 (array)
数组是一种复合数据类型,可以存储多个值。
5.1 定义数组
php
// 索引数组
$arr1 = array(1, 2, 3, 4, 5);
// 或
$arr1 = [1, 2, 3, 4, 5];
// 关联数组
$arr2 = array(
"name" => "John",
"age" => 30,
"email" => "john@example.com"
);
// 或
$arr2 = [
"name" => "John",
"age" => 30,
"email" => "john@example.com"
];
// 多维数组
$arr3 = [
["name" => "John", "age" => 30],
["name" => "Mary", "age" => 25]
];5.2 数组操作
php
// 访问数组元素
echo $arr1[0]; // 1
echo $arr2["name"]; // "John"
echo $arr3[0]["name"]; // "John"
// 添加数组元素
$arr1[] = 6; // 添加到末尾
$arr2["phone"] = "1234567890"; // 添加关联元素
// 修改数组元素
$arr1[0] = 10; // 修改索引元素
$arr2["age"] = 31; // 修改关联元素
// 删除数组元素
unset($arr1[0]); // 删除索引元素
unset($arr2["email"]); // 删除关联元素
// 数组长度
$length = count($arr1);
// 数组遍历
foreach ($arr2 as $key => $value) {
echo "$key: $value<br>";
}5.3 常用数组函数
php
// 数组排序
sort($arr1); // 升序排序
rsort($arr1); // 降序排序
asort($arr2); // 按值升序排序
ksort($arr2); // 按键升序排序
// 数组合并
$arr4 = array_merge($arr1, $arr2);
// 数组搜索
$key = array_search(3, $arr1); // 查找值为 3 的键
// 数组过滤
$filtered = array_filter($arr1, function($value) {
return $value > 2;
});
// 数组映射
$mapped = array_map(function($value) {
return $value * 2;
}, $arr1);6. NULL
null 表示变量没有值。
6.1 定义 NULL
php
$var1 = null;
$var2 = "value";
$var2 = null; // 将变量设置为 null6.2 检测 NULL
php
// 使用 is_null()
if (is_null($var1)) {
echo "变量是 null";
}
// 使用 === 运算符
if ($var1 === null) {
echo "变量是 null";
}
// 使用 isset()
if (!isset($var1)) {
echo "变量未设置或为 null";
}7. 其他数据类型
7.1 对象 (object)
php
// 定义对象
class Person {
public $name;
public $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
}
$person = new Person("John", 30);
echo $person->name; // "John"7.2 资源 (resource)
资源是指向外部资源的引用,如数据库连接、文件句柄等。
php
// 打开文件资源
$file = fopen("test.txt", "r");
// 关闭资源
fclose($file);
// 数据库连接资源
$conn = mysqli_connect("localhost", "root", "", "test");
// 关闭资源
mysqli_close($conn);7.3 回调 (callable)
回调是可以被调用的代码块,如函数、方法等。
php
// 函数作为回调
function add($a, $b) {
return $a + $b;
}
$callback = "add";
echo $callback(1, 2); // 3
// 匿名函数作为回调
$callback = function($a, $b) {
return $a + $b;
};
echo $callback(1, 2); // 38. 类型检测
8.1 类型检测函数
php
// 检测整数
is_int($var);
is_integer($var);
is_long($var);
// 检测浮点数
is_float($var);
is_double($var);
is_real($var);
// 检测布尔值
is_bool($var);
// 检测字符串
is_string($var);
// 检测数组
is_array($var);
// 检测对象
is_object($var);
// 检测 NULL
is_null($var);
// 检测资源
is_resource($var);
// 检测回调
is_callable($var);
// 检测标量类型
is_scalar($var);
// 检测数字
is_numeric($var);
// 检测可迭代
is_iterable($var);8.2 示例:类型检测
php
$var = 123;
if (is_int($var)) {
echo "是整数";
} elseif (is_float($var)) {
echo "是浮点数";
} elseif (is_string($var)) {
echo "是字符串";
} elseif (is_array($var)) {
echo "是数组";
} elseif (is_object($var)) {
echo "是对象";
} elseif (is_null($var)) {
echo "是 null";
} elseif (is_bool($var)) {
echo "是布尔值";
} else {
echo "其他类型";
}9. 类型转换
9.1 自动类型转换
PHP 会根据上下文自动转换类型。
php
// 字符串转整数
$str = "123";
$int = $str + 0; // 123
// 整数转字符串
$int = 123;
$str = "" . $int; // "123"
// 布尔转整数
$bool = true;
$int = $bool; // 1
$bool = false;
$int = $bool; // 09.2 强制类型转换
php
// 转换为整数
$int = (int) "123.45"; // 123
$int = (integer) "123.45"; // 123
// 转换为浮点数
$float = (float) "123"; // 123.0
$float = (double) "123"; // 123.0
$float = (real) "123"; // 123.0
// 转换为字符串
$str = (string) 123; // "123"
// 转换为布尔值
$bool = (bool) ""; // false
$bool = (boolean) "hello"; // true
// 转换为数组
$arr = (array) $object; // 将对象转换为数组
// 转换为对象
$obj = (object) $array; // 将数组转换为对象10. 最佳实践
10.1 类型使用
- 选择合适的类型:根据数据的实际含义选择合适的数据类型
- 保持类型一致:在同一上下文中保持数据类型一致
- 避免混合类型:避免在同一数组或变量中混合不同类型的数据
10.2 性能考虑
- 字符串操作:对于频繁的字符串操作,考虑使用
sprintf()或heredoc - 数组操作:对于大型数组,注意内存使用
- 类型转换:避免不必要的类型转换
10.3 代码可读性
- 明确类型:使用类型提示和文档注释明确变量类型
- 一致命名:使用一致的命名约定,根据类型选择合适的命名
- 注释类型:对于复杂类型,添加注释说明
11. 示例:综合使用
php
<?php
// 字符串
$name = "John Doe";
$greeting = "Hello, " . $name . "!";
echo $greeting . "<br>";
// 整数和浮点数
$age = 30;
$height = 1.75;
echo "年龄:$age,身高:$height<br>";
// 布尔值
$is_active = true;
echo "是否活跃:" . ($is_active ? "是" : "否") . "<br>";
// 数组
$user = [
"name" => $name,
"age" => $age,
"height" => $height,
"is_active" => $is_active,
"hobbies" => ["reading", "coding", "traveling"]
];
echo "用户信息:<br>";
foreach ($user as $key => $value) {
if (is_array($value)) {
echo "$key: " . implode(", ", $value) . "<br>";
} else {
echo "$key: $value<br>";
}
}
// NULL
$address = null;
if (is_null($address)) {
echo "地址:未设置<br>";
}
// 类型转换
$str_age = (string) $age;
echo "年龄(字符串):$str_age,类型:" . gettype($str_age) . "<br>";
$int_height = (int) $height;
echo "身高(整数):$int_height,类型:" . gettype($int_height) . "<br>";
// 类型检测
echo "name 是字符串:" . (is_string($name) ? "是" : "否") . "<br>";
echo "age 是整数:" . (is_int($age) ? "是" : "否") . "<br>";
echo "user 是数组:" . (is_array($user) ? "是" : "否") . "<br>";
echo "address 是 null:" . (is_null($address) ? "是" : "否") . "<br>";
?>12. 总结
PHP 支持多种数据类型,每种类型都有其特定的用途:
- 字符串:用于存储文本数据
- 整数:用于存储整数值
- 浮点数:用于存储带有小数部分的数字
- 布尔值:用于表示真或假
- 数组:用于存储多个值
- NULL:表示变量没有值
- 对象:用于面向对象编程
- 资源:用于引用外部资源
- 回调:用于可调用的代码块
理解和正确使用这些数据类型,是编写高质量 PHP 代码的基础。
