Skip to content

数据类型对应方法参考

数据类型

标量类型

php
<?php
$count = 100; // int 类型
$price = 1.5; // float 类型
$str   = "hello"; // string 类型
$empty = null; // null 类型, 只有这一个取值

引用类型

php
<?php
$arr = array("a", "b", "c"); // 数组
$obj = new StdClass(); // 对象(先不用管 StdClass 是做什么的)

echo "<pre>";
var_dump($arr);
var_dump($obj);
echo "</pre>";

// resource 资源类型: 由于资源类型变量保存有为打开文件、数据库连接、图形画布区域等的特殊句柄
// 在这里不好演示, 后续遇到在学习不迟, 只需要知道有这么一个类型就可以了
//
// never/void 类型: 这是一个新版本提出的又一个特殊类型, 比如, 用于标注函数没有返回值
// 作用有点类似 python 的 None 和 JS 的 undefined

自定义类型

或者叫: 类类型 听着绕口, 意思是: 类似原生类型的自定义类型

  • 接口
  • 枚举

这个可以先不用纠结它是什么, 等学到对应的章节再学习不迟

callable 类型

与 JS 一样, 在 php 中, 函数也是一等公民, 所以就有了这个 可调用内容的类型, 说明白点就相当于 函数类型

获取变量类型函数

函数用途示例
gettype()获取变量的类型名称字符串gettype("hello") 输出 "string"
var_dump()直接输出变量的类型及变量的值var_dump("hello") 输出 string "hello"
php
<?php

$num = 11;
echo gettype($num); // integer
echo "<br/>";

$flt = 1.1;
echo gettype($flt); // double
echo "<br/>";

$str = "hello";
echo gettype($str); // string
echo "<br/>";

$bol = false;
echo gettype($bol); // boolean
echo "<br/>";

$nul = null;
echo gettype($nul); // NULL
echo "<br/>";

$arr = array("a", "b", "c");
echo gettype($arr); // array
echo "<br/>";

$obj = new StdClass();
echo gettype($obj); // object
echo "<br/>";

判断变量类型函数

都说是判断了, 肯定全部返回 bool 值了

函数用途示例
is_string()检查是否为字符串is_string("hello") → true
is_int()/is_integer()检查是否为整数is_int(42) → true
is_float()/is_double()检查是否为浮点数is_float(3.14) → true
is_bool()检查是否为布尔值is_bool(true) → true
is_array()检查是否为数组is_array([1,2]) → true
is_object()检查是否为对象is_object(new stdClass()) → true
is_null()检查是否为nullis_null(null) → true
is_resource()检查是否为资源is_resource(fopen('file.txt','r')) → true
is_callable()检查是否可调用(注意参数是函数名字符串)is_callable('strlen') → true
is_numeric()检查是否为数值或数值字符串is_numeric("123") → true

注意使用这些函数的注意点:

  1. 资源类型gettype() 对资源类型返回 "resource",但不同资源类型无法区分, 比如数据库链接和打开文件句柄都是资源类型
  2. 类型判断性能is_* 系列函数比 gettype() 性能更好,应优先使用

转换数据类型

显示转换

手动的转换变量的类型

使用关键字

转换类型语法示例
整型(int)(integer)(int)"123" → 123
浮点型(float), (double)(real)(float)"3.14" → 3.14
字符串(string)(string)42 → "42"
布尔型(bool)(boolean)(bool)"" → false
数组(array)(array)"text" → ["text"]
对象(object)(object)["a" => 1] → 对象
NULL(unset)(unset)$var → null
php
<?php

// 字符串转数字
$number = (int)"42 cats"; // 42 (会忽略非数字部分)
$float = (float)"3.1415"; // 3.1415

// 数字转字符串
$string = (string)123; // "123"

// 布尔转换
$trueVal = (bool)"0"; // true (非空字符串为true)
$falseVal = (bool)""; // false (空字符串为false)

// 复杂类型转换
$array = (array)"hello"; // ["hello"]
$obj = (object)["key" => "value"]; // 对象 with property key

使用内置函数转换

函数用途示例
intval()转换为整数intval("42", 10) → 42
floatval()转换为浮点数floatval("3.14") → 3.14
strval()转换为字符串strval(123) → "123"
boolval() (PHP 5.5+)转换为布尔值boolval("") → false
settype()设置变量类型settype($var, "integer")
php
<?php
// 使用转换函数
$num = intval("123.45"); // 123 (截断小数部分)
$float = floatval("3.14abc"); // 3.14 (忽略非数字部分)
$str = strval(true); // "1" (true转为"1", false转为"")

// settype() 会改变原变量类型
$var = "123";
settype($var, "integer"); // $var 现在是整数 123

// boolval() 示例 (PHP 5.5+)
var_dump(boolval([])); // false
var_dump(boolval([1])); // true

隐式类型转换

弱类型语言的局限性, 为了便捷性而做出的取舍, 这点 JS 和 python 也一样

php
<?php
// 字符串 + 数字 = 数字
$res = "10" + 5; // (int) 15 (说明字符串"10"被转换为整数然后计算)

// 字符串连接(数字转为字符串)
$res2 = "10" . 5; // (string) "105" (说明 5 被转换为字符串然后拼接)

类型转换陷阱与注意事项

  1. 字符串到数字的转换:
php
<?php
$res1 = (int)"123abc"; // 123 (忽略非数字部分)
$res2 = (int)"abc123"; // 0 (无法转换)
  1. 布尔转换规则:

    • 转换为 false 的值:0, 0.0, "", "0", [], null, false
    • 其他所有值转换为 true
  2. 浮点精度问题:

php
<?php
$res = (int)(0.1 + 0.7) * 10; // 7(不是8, 因为浮点计算精度问题)
  1. 对象转换限制:
php
<?php
$array = (array)new DateTime();
// 可以转换但内部属性处理复杂, 不推荐这么做,
// 这代码看起来全是魔法, 可读性太差了, 建议手动处理
  1. 资源类型转换:
php
<?php
$resource = fopen("file.txt", "r");
$r_id = (int)$resource; // 资源ID(整数)

Released under the MIT License.