PHP – 特殊类型: resource 和 NULL


PHP 两种数据类型 — resource 和 NULL — 被归类为特殊类型。资源类型的对象是指外部资源,如数据库连接、文件流等。另一方面,NULL 数据类型是没有为其分配任何数据的变量。在本章中,我们将更多地了解这些类型。

资源(Resource)类型

PHP 程序通常需要与外部环境(如数据库、磁盘文件等)进行交互。这些在 PHP 中被视为 资源(Resource )Resource 是一种特殊的数据类型,指的是任何此类外部资源。PHP 使用相关函数来创建这些资源。例如,fopen() 函数打开一个磁盘文件,其引用存储在 resource 变量中。

PHP  Zend 引擎使用引用计数系统。因此,垃圾回收器会自动销毁引用计数为零的 resource ,并且不需要手动释放 resource 数据类型使用的内存。

不同内置 PHP 函数返回相应的 resource 变量。随后,PHP 使用它们与相应的外部环境进行交互。例如,fopen() 函数返回一个文件资源,该资源( Resource )充当文件句柄,并且此 resource 变量有助于对文件执行读/写操作。

下表总结了返回 resource 变量的不同函数 -

Resource 类型 内置函数 定义
建立 销毁
bzip2 bzopen() bzclose() Bzip2 文件
curl curl_init() curl_close() Curl session
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() Dir 句柄
stream fopen(), tmpfile() fclose() File 句柄
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 是要获取其类型的资源变量。此函数返回与资源类型对应的字符串。

还有 get_resource_id() 函数,一个给定资源的整数标识符。


 get_resource_id(resource $resource): int

例子

此函数提供了一种类型安全的方法,用于为给定资源生成整数标识符。


<?php
   $fp = fopen("hello.php", "r");
   $resource = get_resource_type($fp);
   $id = get_resource_id($fp);
   echo "Resource 类型为 : $resource ,Resource ID为 : $id";
?>

它将产生以下输出 -

Resource 类型为:stream  ,Resource ID为:5

NULL 类型

在 PHP 中,没有值的变量称为 null 数据类型。此类变量的值定义为 NULL。可以使用 unset() 函数将变量显式分配为 NULL 或将其值设置为 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)