PHP Data Type


PHP Data Type

Hello World

echo("Hello World")
echo "Hello World"

註解

// 註解

宣告

PHP 有自動型別判斷 無須指定型別
這邊我們也使用 var_dump 印出型別與數值
$number = 1
echo var_dump($number);
output
int(1)

bool


最簡單的基本型態僅有 true and false

$b = true
echo var_dump($b); // bool(true)

true 也可以寫作 True or TRUE 反之 false 也是如此 這邊就不再贅述

在轉型上如果能被判定成0或是空字串或NULL都會變成false

1. 0 or -0
2. 空字串
3. 字串 0
4. 空陣列
5. NULL
echo var_dump((bool) 0); // bool(false)
echo var_dump((bool) -0); // bool(false)
echo var_dump((bool) ""); // bool(false)
echo var_dump((bool) "0"); // bool(false)
echo var_dump((bool) []); // bool(false)
echo var_dump((bool) NULL); // bool(false)

轉型上能被判定成非 0 或是非 NULL 都會變成 true

1. 大於 0 之 int or float
2. 有內容得字串 但不能只有單一個字串 0
3. 不是空陣列
4. 非 NULL 的物件
echo var_dump((bool) 1); // bool(true)
echo var_dump((bool) "abc"); // bool(true)
echo var_dump((bool) [1, 2, 3]); // bool(true)
echo var_dump((bool) !NULL); // bool(true)

int


相對於大部分語言整數會區分為 Int、Long、Short,但 PHP 當中整數型態只有 int 一種

以下都是 int 的表示方法

$number = 1234; // 十進制
$number = 0123; // 八進制 
$number = 0x1A; // 十六進制 
$number = 0b11111111; // 二進制
$number = 1_234_567; // PHP 7.4.0 開始支援底線表示

當然 int 也是有其最大級最小值,可以透過 PHP_INT_MAX 以及 PHP_INT_MIN 得知

echo PHP_INT_MAX; //  9223372036854775807
echo PHP_INT_MIN; // -9223372036854775808

在 PHP 中如果 int 還有個特性,那就是數值太大或是太小那就會自動變成 float

echo var_dump(PHP_INT_MAX); // int(9223372036854775807)
echo var_dump(PHP_INT_MAX + 1); // float(9.223372036854776E+18)
echo var_dump(PHP_INT_MIN); // int(-9223372036854775808)
echo var_dump(PHP_INT_MIN - 1); // float(-9.223372036854776E+18)

型別轉換特性上 bool 轉成 int 會依照 true or false 對應轉換成 1 or 0

float 則會自動去掉小數,字串如果轉換失敗則會變成 int(0)

echo var_dump((int) true); // int(1)
echo var_dump((int) false); // int(0)
echo var_dump((int) "123"); // int(123)
echo var_dump((int) "abc"); // int(0)
echo var_dump((int) 1.234); // int(1)

float


PHP 也與大部分語言不同浮點數也只有 float 並沒有 double

以下都是 float 的表示方法

$number = 1.2;
$number = 1.2e3; 
$number = 7E-10;
$number = 123_456.789; // PHP 7.4.0 開始支援底線表示

轉型上也與 int 類似,bool 轉成 float 會依照 true or false 對應轉換成 1 or 0

int 則可以直接轉換成 float,字串如果轉換失敗也會變成0

echo var_dump((float) true); // float(1)
echo var_dump((float) false); // float(0)
echo var_dump((float) 123); // float(123)
echo var_dump((float) "123"); // float(123)
echo var_dump((float) "123.45"); // float(123.45)
echo var_dump((float) "abc"); // float(0)

string


PHP 的 string 使用上與其他語言並沒有什麼不同

1. 字串轉換

在轉換上 bool 轉換成 string 時 true 會被轉成 1 false 為 空字串,其餘則會直接轉型成 string

echo var_dump((string) true); // string(1) "1"
echo var_dump((string) false); // string(0) ""
echo var_dump((string) 123); // string(3) "123"
echo var_dump((string) 123.45); // string(6) "123.45"

這邊要注意的是 string(3) 當中的 3 顯示的是字元數

2. 字串連接

在 PHP 中字串連接是使用 .

$name = "aki";
$s = "my name is ".$name; // my name is aki

3. 雙引號、單引號

雙引號、單引號 最大的差異就是雙引號會解析跳脫字元而單引號不會 如下兩例

$name = "aki";
echo "my name is $name"; // my name is aki
$name = "aki";
echo 'my name is $name'; // my name is $name

當然如果想要在雙引號內顯示跳脫字元那也可以加上反斜線 \

$name = "aki";
echo "my name is \"$name\""; // my name is "aki"

舉例來說我個人在下 sql 的時候就習慣使用雙引號因為單引號就必須要大量使用 . 來連接變數 當然這很看人喜好

$sql = "select * from user where u_id = '$u_id'";
$sql = 'select * from user where u_id = \''.$u_id.'\'';

string number


PHP 有個特性就是變數在執行時才會決定其型態

因此統合剛剛所述 int float 字串轉型的內容呢

我們也能把字串拿來當作數字做計算

$num = 1 + "2" // 3 
$num = 1 + "-1.3e3" // -1299

簡單來說呢 string 如果能正確被轉型成數字 那就可以拿來計算

那如果無法正確轉型呢?這在 PHP8 是有個分界在

PHP8 如果遇到無法轉型那就會拋出 TypeError

$num = 1 + "members" // PHP8 以前會是整數 1, PHP8 則會觸發 TypeError

還有一種情況 就像是以下狀況前半段數字可以轉型後半段則不能轉型

在執行中會顯示 Warning: A non-numeric value encountered 但是 $num 還是會得到 101

$num = 1 + "100 members" // Warning: A non-numeric value encountered

WRITTEN BY
Aki

熱愛寫code的開發者,專注於 Android 手機 Native App 開發,對於 IOS 也有涉略。閒暇之餘也學習 JavaScript 等前端框架