PHP 特殊类型
PHP 的两种数据类型 resource 和 NULL 被归类为 特殊类型。resource 类型对象引用外部资源,如数据库连接、文件流等。另一方面,NULL 数据类型是未被赋值的变量。在本章中,我们将详细了解这些类型。
Resource 类型
PHP 程序经常需要与外部环境交互,如数据库或磁盘文件等。在 PHP 中,这些被视为 resource。resource 是一种特殊数据类型,引用任何此类外部资源。PHP 使用相关函数来创建这些资源。例如,fopen() 函数打开磁盘文件,其引用存储在 resource 变量中。
PHP 的 Zend engine 使用引用计数系统。因此,引用计数为零的 resource 会由垃圾回收器自动销毁,resource 数据类型使用的内存无需手动释放。
不同的内置 PHP 函数返回各自的 resource 变量。随后,PHP 使用它们与相应的外部环境交互。例如,fopen() 函数返回文件 resource,作为文件句柄,通过此 resource 变量实现对文件的读写操作。
下表总结了返回 resource 变量的不同函数 −
| Resource 类型 | 内置函数 | 定义 | |
|---|---|---|---|
| 生成 | 销毁 | ||
| bzip2 | bzopen() | bzclose() | Bzip2 文件 |
| curl | curl_init() | curl_close() | Curl 会话 |
| ftp | ftp_connect(), | ftp_close() | FTP 流 |
| mssql link | mssql_connect() | mssql_close() | 链接到 Microsoft SQL Server 数据库 |
| mysql link | mysql_connect() | mysql_close() | 链接到 MySQL 数据库 |
| mysql result | mysql_db_query(), | mysql_free_result() | MySQL 结果 |
| oci8 connection | oci_connect() | oci_close() | 连接到 Oracle 数据库 |
| ODBC link | odbc_connect() | odbc_close() | 链接到 ODBC 数据库 |
| pdf document | pdf_new() | pdf_close() | PDF 文档 |
| stream | opendir() | closedir() | 目录句柄 |
| stream | fopen(), tmpfile() | fclose() | 文件句柄 |
| socket | socket_create() | Socket_close() | Socket 句柄 |
| xml | xml_parser_create() | xml_parser_free() | XML 解析器 |
| zlib | gzopen() | gzclose() | gz 压缩文件 |
| zlib.deflate | deflate_init() | None() | 增量 deflate 上下文 |
| zlib.inflate | inflate_init() | None() | 增量 inflate 上下文 |
PHP 提供了 get_resource_type() 函数,用于返回变量的 resource 类型。
get_resource_type ( resource $handle ) : string
其中 $handle 是要获取类型的 resource 变量。该函数返回对应 resource 类型的字符串。
还有 get_resource_id() 函数,用于返回给定 resource 的整数标识符。
get_resource_id(resource $resource): int
示例
该函数提供了一种类型安全的方式,为给定 resource 生成整数标识符。
<?php
$fp = fopen("hello.php", "r");
$resource = get_resource_type($fp);
$id = get_resource_id($fp);
echo "The resource type is : $resource The resource ID is : $id";
?>
它将产生以下 输出 −
The resource type is : stream The resource ID is : 5
NULL 类型
在 PHP 中,没有值的变量被称为 null 数据类型。此类变量的值定义为 NULL。变量可以显式赋值为 NULL,或者使用 unset() 函数将其值设置为 null。
$var=NULL;
可以将其他类型的变量强制转换为 null,尽管从 PHP 7.2 开始,将 null 强制转换为其他类型已被弃用。在早期版本中,使用 (unset)$var 语法进行强制转换。
示例
以下示例展示了如何将 NULL 赋值给变量。
<?php $var=NULL; var_dump($var); ?>
它将产生以下输出 −
NULL
示例
以下示例将 null 变量强制转换为其他基本变量 −
<?php $var = NULL; var_dump( (int) $var); var_dump((float)$var); var_dump((bool) $var) ; var_dump( (boolean) $var); ?>
它将产生以下输出 −
int(0) float(0) bool(false) bool(false)