On this page

PHP 类型

基本类型

一些基础类型是内置类型,跟语言紧密集成,不能用用户定义类型重现(reproduced)。

基础类型列表是:

  • 内置类型

    • null 类型
    • 标量类型:
    • bool 类型
      • int 类型
    • float 类型
    • string 类型
    • array 类型
    • object 类型
    • resource 类型
    • never 类型
    • void 类型
    • 相对类类型:self、parent 和 static
  • 字面量类型

    • false
    • true
  • 用户定义的类型(通常称为类类型)

  • callable 类型


复合类型

可以将简单类型组合为复合类型。PHP 允许使用以下方式组合类型:

  • 类类型(接口和类名)的交集。
  • 类型联合。

交集类型

交集类型接受满足多个类类型声明的值,而不是单个值。交集类型中的每个类型由 &符号连接。因此,类型 TUV组成的交集类型将写成 T&U&V


联合类型

联合类型接受多个不同类型的值,而不是单个类型。联合类型中的每个类型由 |符号连接。因此类型 TUV 的联合类型写成T|U|V。如果其中一种类型是交集类型,需要使用括号括起来,在DNF 中写成:T|(X&Y)


类型别名

PHP 支持两种类型别名:mixediterable,分别对应 object|resource|array|string|float|int|bool|nullTraversable|array联合类型

注意: PHP 不支持用户定义类型别名。


NULL

null 类型是 PHP 的单元类型,比如,它仅有一个值 null

未定义和 unset() 的变量都将解析为值 null

语法

null 类型只有一个值,就是不区分大小写的常量 null


<?php
$var = NULL;       
?>

转换到 NULL

警告 本特性自 PHP 7.2.0 起废弃,并且自 PHP 8.0.0 起被移除。强烈建议不要使用本特性。

使用 (unset) $var 将一个变量转换为 null将不会删除该变量或 unset 其值。仅是返回 null 值而已。


Boolean 布尔类型

bool 仅有两个值,用于表达真(truth)值,不是 true 就是 false

语法

要指定一个 bool,使用常量 truefalse。两个都不区分大小写。


<?php
$foo = True; // 设置 $foo 为 TRUE
?>

通常运算符所返回的 bool 值结果会被传递给控制流程


<?php
// == 是一个操作符,它检测两个变量是否相等,并返回一个布尔值
if ($action == "show_version") {
    echo "The version is 1.23";
}

// 这样做是不必要的...
if ($show_separators == TRUE) {
    echo "<hr>\n";
}

// ...因为可以使用下面这种简单的方式:
if ($show_separators) {
    echo "<hr>\n";
}
?>

转换为布尔值

要明确地将值转换成 bool,可以用 (bool)强制转换。通常这不是必需的,因为值在逻辑上下文中使用将会自动解释为 bool类型的值。更多信息请阅读类型转换页面。

当转换为 bool 时,以下值被 认为是 false

  • 布尔false 本身

  • 整型0(零)

  • 浮点型0.0(零)-0.0(零)

  • 字符串 "",以及字符串 "0"

  • 不包括任何元素的数组

  • 单位类型 NULL(包括尚未赋值的变量)

  • 内部对象的强制转换行为重载为 bool。例如:由不带属性的空元素创建的
     [SimpleXML](https://www.php.net/manual/zh/ref.simplexml.php) 对象。
    

所有其它值都被认为是 true(包括 资源NAN)。

警告 -1 和其它非零值(不论正负)一样,被认为是 true


<?php
var_dump((bool) "");        // bool(false)
var_dump((bool) "0");       // bool(false)
var_dump((bool) 1);         // bool(true)
var_dump((bool) -2);        // bool(true)
var_dump((bool) "foo");     // bool(true)
var_dump((bool) 2.3e5);     // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array());   // bool(false)
var_dump((bool) "false");   // bool(true)
?>