PHP – 資料型別



術語“資料型別”指的是將資料分類到不同的類別。PHP 總共有八種資料型別,我們用它們來構建變數:

  • 整數 - 沒有小數點的整數,例如 4195。

  • 雙精度浮點數 - 浮點數,例如 3.14159 或 49.1。

  • 布林值 - 只有兩個可能的值,要麼為真,要麼為假。

  • NULL - 僅有一個值:NULL 的特殊型別。

  • 字串 - 字元序列,例如 'PHP 支援字串操作。'

  • 陣列 - 其他值的命名和索引集合。

  • 物件 - 程式設計師定義的類的例項,可以打包其他型別的值以及特定於類的函式。

  • 資源 - 保留對 PHP 外部資源(如資料庫連線)的引用的特殊變數。

前五個是簡單型別,接下來的兩個(陣列和物件)是複合型別。複合型別可以打包任意型別的值,而簡單型別則不能。

在本章中,讓我們詳細討論這些 PHP 內建資料型別。

PHP 中的整數資料型別

沒有小數點的整數(例如 4195)在 PHP 中屬於 int 型別。整數資料型別是最簡單的型別。它們對應於簡單的整數,包括正數和負數。

  • int 是集合 Z = {..., -2, -1, 0, 1, 2, ...} 中的一個數字。

  • int 可以用十進位制(基數 10)、十六進位制(基數 16)、八進位制(基數 8)或二進位制(基數 2)表示法表示。

要使用八進位制表示法,數字前要加上 "0o" 或 "0O"。要使用十六進位制表示法,數字前要加上 "0x"。要使用二進位制表示法,數字前要加上 "0b"。

以下是一些 示例

  • 十進位制整數 - 201、4195、-15

  • 八進位制整數 - 0010、0O12、-0O21

  • 十六進位制整數 - 0x10、-0x100

  • 二進位制整數 - 0b10101、-0b100

整數可以分配給變數,也可以用於表示式,例如:

$int_var = 12345;
$another_int = -12345 + 12345;

PHP 中的雙精度浮點數資料型別

雙精度浮點數變量表示浮點數(也稱為“浮點數”、“雙精度浮點數”或“實數”),它們是帶有小數部分的數字。小數部分位於整數部分之後,由小數點符號 (.) 分隔。

注意 - 雙精度浮點數變數可以是正數、負數或零。

$var1 = 1.55
$var2 =-123.0

科學浮點數表示法

PHP 還允許使用科學表示法來表示帶有更多小數位數的浮點數。“E”或“e”符號用於分隔整數和小數部分。

− 1.2e3, 2.33e-4, 7E-10, 1.0E5 

預設情況下,雙精度浮點數以所需的最小小數位數列印。請檢視以下 示例

<?php
   $many = 2.2888800;
   $many_2 = 2.2111200;
   $few = $many + $many_2;

   print("$many + $many_2 = $few");
?>

它產生以下 輸出

2.28888 + 2.21112 = 4.5

PHP 中的布林值資料型別

bool 型別只有兩個值;它可以是真或假。bool 型別用於表達真值。

$bool1 = true;
$bool2 = false;

您還可以使用整數“1”和“0”來表示真和假布林值:

$bool3 = 1; 
$bool4 = 0;

通常,返回 bool 值的運算子的結果將傳遞給控制結構,例如 if、whiledo-while。例如,

if (TRUE)
   print("This will always print.");

else
   print("This will never print.");

將其他資料型別解釋為布林值

以下是一組規則,您可以使用它們將其他資料型別解釋為布林值:

  • 如果值是數字,則僅當該值等於零時才為假,否則該值為真。

  • 如果值是字串,則當字串為空(字元數為零)或為字串“0”時為假,否則為真。

  • NULL 型別的值為假。

  • 如果值是陣列,則當它不包含其他值時為假;否則為真。對於物件,包含值意味著具有已分配值的成員變數。

  • 有效的資源為真(儘管某些在成功時返回資源的函式在不成功時將返回 FALSE)。

注意 - 不要使用雙精度浮點數作為布林值。

以下每個變數在用作布林值上下文中時,其名稱中都包含真值。

$true_num = 3 + 0.14159;
$true_str = "Tried and true"
$true_array[49] = "An array element";
$false_array = array();
$false_null = NULL;
$false_num = 999 - 999;
$false_str = "";

PHP 中的字串資料型別

字串是一系列字元,例如“PHP 支援字串操作”。

在 PHP 中,字元與位元組相同。這意味著 PHP 僅支援 256 個字元集,因此不提供本機 Unicode 支援。

PHP 支援單引號和雙引號兩種字串格式。以下兩種表示方式在 PHP 中都是有效的:

$string_1 = "This is a string in double quotes";
$string_2 = 'This is a somewhat longer, singly quoted string';

以下是一些關於字串型別的更多示例:

$string_39 = "This string has thirty-nine characters";
$string_0 = "";		// a string with zero characters

單引號字串幾乎按字面原樣處理,而雙引號字串會將變數替換為其值,並對某些字元序列進行特殊解釋。

<?php
   $variable = "name";
   $literally = 'My $variable will not print!';

   print($literally);
   print "\n";

   $literally = "My $variable will print!";
   print($literally);
?>

執行此程式碼時,將產生以下輸出

My $variable will not print!
My name will print

字串長度沒有人工限制。在可用記憶體範圍內,您應該能夠建立任意長度的字串。

由雙引號分隔的字串(如 "this")會被 PHP 以以下兩種方式預處理:

  • 以反斜槓 (\) 開頭的某些字元序列將替換為特殊字元。

  • 變數名(以$開頭)將替換為其值的字串表示形式。

轉義序列替換如下:

  • \n 將替換為換行符

  • \r 將替換為回車符

  • \t 將替換為製表符

  • \$ 將替換為美元符號本身 ($)

  • \" 將替換為單個雙引號 (")

  • \\ 將替換為單個反斜槓 (\)

PHP 還具有HeredocNowdoc 字串資料型別的表示形式。

字串資料型別的 Heredoc 表示形式

您可以使用 heredoc 將多行賦值給單個字串變數:

<?php
   $channel =<<<_XML_

   <channel>
      <title>What's For Dinner</title>
      <link>http://menu.example.com/ </link>
      <description>Choose what to eat tonight.</description>
   </channel>
   _XML_;

   echo <<< END
      This uses the "here document" syntax to output multiple lines with 
	  variable interpolation. Note that the here document terminator must
	  appear on a line with just a semicolon. no extra whitespace!
   END;

   print $channel;
?>

執行此程式碼時,將產生以下輸出:

This uses the "here document" syntax to output
multiple lines with variable interpolation. Note
that the here document terminator must appear on a
line with just a semicolon. no extra whitespace!

<channel>
   <title>What's For Dinner</title>
   <link>http://menu.example.com/ </link>
   <description>Choose what to eat tonight.</description>
</channel>

字串資料型別的 Nowdoc 表示形式

heredoc 識別符號的所有規則也適用於 nowdoc 識別符號。nowdoc 的指定方式與heredoc相同,但在 nowdoc 內部沒有解析。您可以使用 nowdoc 結構嵌入大塊文字,而無需使用任何跳脫字元。

nowdoc 使用與 heredoc 相同的 <<< 序列進行標識,但識別符號用單引號括起來,例如 <<<'EOT'。nowdoc 適用於單引號字串,就像 heredoc 適用於雙引號字串一樣。

請檢視以下示例:

<?php
   echo <<<'IDENTIFIER'
   As the cat cleared its throat with a refined "Meow",
   the squirrel chirped excitedly about its latest
   discovery of a hidden stash of peanut treasure!
   IDENTIFIER;
?>

執行程式碼並檢查其輸出:

As the cat cleared its throat with a refined "Meow",
the squirrel chirped excitedly about its latest
discovery of a hidden stash of peanut treasure!

PHP 中的 Null 資料型別

在 PHP 中,null 表示一種特殊型別,它只有一個值:NULL。未定義和 unset() 變數將解析為值 "null"。

程式設計師通常在 PHP 中使用 Null 資料型別來初始化變數或指示值缺失。

要為變數賦予 NULL 值,只需像這樣賦值:

$my_var = NULL;

特殊的常量 NULL 通常是大寫的,但實際上它是不區分大小寫的;您也可以鍵入:

$my_var = null;

已分配 NULL 值的變數具有以下屬性:

  • 在布林上下文中,它評估為 FALSE。

  • 當使用 IsSet() 函式測試時,它返回 FALSE。

注意:PHP 中變數的資料型別是在執行時根據分配給它們的值確定的。

PHP 中的陣列資料型別

PHP 中的陣列是有序對映,一個鍵與一個或多個值相關聯。PHP 陣列使用 array() 函式定義,或者使用簡寫形式,其中資料放在方括號中。

請檢視以下關聯陣列示例:

使用 array() 函式

$arr = array(
   "foo" => "bar",
   "bar" => "foo",
);

使用簡寫形式

$arr = [
   "foo" => "bar",
   "bar" => "foo",
];

PHP 中的陣列也可以使用“鍵值對”語法定義。這稱為索引陣列

$arr = array("foo", "bar", "hello", "world");

多維陣列中,主陣列中的每個元素也可以是陣列。並且,子陣列中的每個元素可以是陣列,依此類推。多維陣列中的值使用多個索引訪問。

注意:在 PHP 中,複合資料型別用於儲存資料集合,包括陣列和物件。

PHP 中的物件資料型別

物件型別是程式設計師定義的類的例項,它可以打包其他型別的值以及特定於該類的函式。

要建立新物件,請使用new 語句例項化一個類:

class foo {
   function bar() {
      echo "Hello World."; 
   }
}
$obj = new foo;
$obj->bar();

PHP 中的資源資料型別

資源是特殊的變數,它們儲存對 PHP 外部資源的引用(例如檔案流或資料庫連線)。

這是一個檔案資源的示例:

$fp = fopen("foo.txt", "w");

屬於上述任何型別的資料都儲存在變數中。但是,由於 PHP 是一種動態型別語言,因此無需指定變數的型別,因為這將在執行時確定。

示例:gettype() 函式

gettype() 函式有助於找出儲存在變數中的資料型別:

<?php
   $x = 10;
   echo gettype($x) . "\n";

   $y = 10.55;
   echo gettype($y) . "\n";

   $z = [1,2,3,4,5];
   echo gettype($z);
?>

執行此程式碼時,將產生以下輸出

integer
double
array
廣告