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)
廣告