PHP – 特殊类型



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

资源类型

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

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

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

下表总结了返回资源变量的不同函数:

资源类型 内置函数 定义
生产 销售
bzip2 bzopen() bzclose() Bzip2 文件
curl curl_init() curl_close() Curl 会话
ftp ftp_connect(), ftp_close() FTP 流
mssql 链接 mssql_connect() mssql_close() 到 Microsoft SQL Server 数据库的链接
mysql 链接 mysql_connect() mysql_close() 到 MySQL 数据库的链接
mysql 结果 mysql_db_query(), mysql_free_result() MySQL 结果
oci8 连接 oci_connect() oci_close() 到 Oracle 数据库的连接
ODBC 链接 odbc_connect() odbc_close() 到 ODBC 数据库的链接
pdf 文档 pdf_new() pdf_close() PDF 文档
opendir() closedir() 目录句柄
fopen(), tmpfile() fclose() 文件句柄
套接字 socket_create() Socket_close() 套接字句柄
xml xml_parser_create() xml_parser_free() XML 解析器
zlib gzopen() gzclose() gz 压缩文件
zlib.deflate deflate_init() None() 增量解压缩上下文
zlib.inflate inflate_init() None() 增量压缩上下文

PHP 有 get_resource_type() 函数,它返回变量的资源类型。

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 "The resource type is : $resource The resource ID is : $id";
?>

它将产生以下**输出**:

The resource type is : stream The resource ID is : 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)
广告