PHP的型態主要分為5種,分別是:
- scalar type (標量類型)
- compound type (複合類型)
- special type (特殊類型)
- virtual type (虛擬類型)
- pseudo type (偽類型)
scalar type
這種型態的變數會儲存某一個特定的數值,例如一個特定字串或數字…等等。
有4種型態屬於 scalar type,分別是:
- String
- Integer
- Float
- Boolean
以下再分別對這4種型態做介紹。
1. String
String(字串型態) 是由一系列任意的字元組成,例如: “Hello World”。
- 字串需要被包覆在引號內,引號可以是單引號或雙引號,都同樣代表字串。
- 在其他程式語言中,單引號一般用在字元上,而雙引號用在字串上,但在 PHP 當中都同樣代表字串,而它的區別在於
1. 當文字被包覆在單引號的時候,會被當成完全的字串
2. 而文字被包覆在雙引號的時候,可以結合變數去形成一個新的字串
由下面的範例可以解釋得更加清楚。
在 PHP 的字串型態中主要有以下4種表現方式: 單引號
當文字包覆在單引號中,會被認定成完全的字串。1
2
3$name = 'Jason';
$strInSingleQuote = 'Hello World, my name is $name.';
echo $strInSingleQuote; // 印出來的結果是 Hello World, my name is $name.雙引號
當文字包覆在雙引號中,可以結合變數去形成一個新的字串。1
2
3$name = 'Jason';
$strInDoubleQuotes = "Hello World, my name is $name.";
echo $strInDoubleQuotes; // 印出來的結果是 Hello World, my name is Jason.Heredoc 結構
當文字內容很多的時候,可以採用這種方式去包覆字串。
在 <<< 符號之後加上一個字型命名的標識文字,中間存放任意字串,最後在下一行的最前面(不可以有空格或其他文字)用前面定義的標識文字當作結束。
用雙引號包覆標識文字和不使用任何引號的標識文字都視為 heredoc 結構1
2
3
4
5$name = 'Jason';
$strInHeredoc = <<<EXAMPLE
Hello World, my name is $name.
EXAMPLE
echo $strInHeredoc; // 印出來的結果是 Hello World, my name is Jason.
- nowdoc 結構
當文字內容很多的時候,可以採用這種方式去包覆字串。
和 heredoc 結構不同的地方在於,標識文字要用單引號去包覆,而裡面的文字會被當成完全的字串。1
2
3
4
5$name = 'Jason';
$strInNowdoc = <<<'EXAMPLE'
Hello World, my name is $name.
EXAMPLE
echo $strInNowdoc; // 印出來的結果是 Hello World, my name is $name.
2. Integer
- Integer(整數型態) 是由介於 -2147483648 到 2147483647 之間的非10進位數字組成。
- 整數型態最少必需要包含一個位元,就是說你必須至少指派任一個數字給它。
- 當數字大到超出儲存範圍發生溢位時,整數型態會自動轉換成浮點數型態(Float)。
- 整數型態可以使用 2進位、8進位、16進位來儲存數值。
1
2
3
4
5$positiveNum = 123;
$negativeNum = -123;
$numInBinary = 0b1111;
$numInOctal = 0127;
$numInHexadecimal = 0x1A;
3. Float
- Float (浮點數型態)儲存的數值必須包含1個小數點。
- 當浮點數型態的變數無法被辨識的時候,會回傳 NAN,表示不是一個數字 (Not A Number)
1
2$numInFloat = 1.213;
$numInFloat = 1.2e3;
4. Boolean
- Boolean (布林值型態)儲存的數值是2種可能的狀態,True(真) 或 false(假)。
1
2$bt = true;
$bf = false;
compound type
這種型態的變數會由多個數值組成,例如一個陣列或是物件。
有2種型態屬於 compound type,分別是:
- Array
- Object
以下再分別對這2種型態做介紹。
1. Array
- 一個陣列可以儲存多個數值,不需要事前指定陣列的大小。
- 陣列是以 key-value 的方式去儲存數值,一個 key 對應一個 value,用對應的 key 去取出數值。
- key 可以是 Integer 或 String 型態,而 value 可以是任意類型。
- 若沒有指定 key,則陣列預設使用數字 0, 1, 2, 3…. 代表陣列的 key。
- 可以使用 array() 關鍵字或 [] 符號去建立一個新陣列。
1
2
3$names = array('myName' => 'Jason', 'Lai');
echo $names['myName']; // 結果會印出 'Jason'
echo $names[1]; // 結果會印出 'Lai'
2. Object
物件是用來描述或是表達一個現實世界的某個物體,由多種屬性和方法組成。
比如:
可以建立一個人的物件 (Person),然後人有性別、年齡、姓名…等等,這些存在物件裡的變數我們稱為屬性。
而人會說話、走路…等等,這些存在物件裡的函式我們稱為方法。
更詳盡的介紹會在第8章介紹。
- 可以透過 new 關鍵字來實做一個物件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21class Person
{
private $sex;
private $age;
public $name;
function __construct($sex, $age, $name){
$this->sex = $sex;
$this->age = $age;
$this->name = $name;
}
public function talk(){
echo "Hello, my name is " . $this->name;
}
}
$jason = new Person('male', 30, 'Jason');
$jason->talk(); // 結果會印出 'Hello, my name is Jason'
$jason->name = 'JasonLai';
$jason->talk(); // 結果會印出 'Hello, my name is JasonLai'
special type
這種型態的變數是用來表示某種特別的目的。
1. NULL
NULL (空值型態),表示不存在其他的數值。
- 當某個變數是 NULL 型態時,它只可以有 NULL 這個數值 (大小寫不影響)。
1
2
3$var = 'test for null type';
$var = null;
var_dump($var); // 結果會印出 NULL
2. Resource
Resource (資源型態),代表某個外部資料的參考,例如資料庫或從外部開啟的文字檔…等等。
- 通常會由某個特別的函式建立或使用。
1
2
3
4
5
6
7// 1. 從外部開啟名為 'note' 的文字檔
$handle = fopen('note.txt', 'r');
var_dump($handle);
// 2. 建立與 mysql 資料庫的連線
$conn = new mysqli('localhost', 'userName', 'password', 'dbName');
var_dump($conn);
virtual type
這種型態的變數並非是真實存在的型態,也就是說你無法在程式碼裡面使用這種型態。
你只會在文件裡面看到這種型態出現,它是用來確保文件的可讀性所使用的型態。
1. Mixed
Mixed (混合型態)表示參數可以適用於不同的資料型態,例如 String 或 Integer,但要注意的是不一定是所有的型態都適合!1
2
3
4
5
6function printValue(mixed $value){
if(!is_array($value)) echo $value;
else
foreach($value as $singleValue)
echo $singleValue;
}
2. Number
Number (數字型態)表示參數可以是 Float 或是 Integer 任一種型態。1
2
3function countNumber(number $targetNum){
// Do something...
}
3. Callback
Callback (回調型態)又稱為 callable,可以用在一般的函式或物件裡的方法。
主要是因為在 PHP 裡,函式是由字串的型式傳遞,因此像是call_user_func() 或 usort() 方法可以以回調函式當作參數去執行特定的函式,
換句話說,就是使用名稱去搜尋對應的函式,並試圖去執行目標函式的程式碼。同樣的效果也可以用變數的方式達成,這會在第2章說明。
由下方的範例可以更清楚的解釋。1
2
3
4
5function my_callback_function() {
echo 'Hello World';
}
call_user_func('my_callback_function'); // 結果會印出 'Hello World'
4. array|object
表示型態可以是陣列或物件。
5. void
表示某個特定的方法沒有任何的回傳值。
pseudo type
Pseudo Type (偽型態),它不代表任何特定的資料型態,通常會出現在指定參數型態的部分。
1. Iterable
代表任意數值集合的類型,一般會和 foreach 函式一起出現。1
2
3
4function showAllDatas(iterable $datas){
foreach($datas as $singleData)
echo $singleData;
}