PHP 8 在 2020 年底推出,為 PHP 語言帶來了許多令人興奮的新功能和性能提升。以下將詳細介紹這些特性,並適時加入圖示以幫助您更直觀地理解。
1. 聯合型別 (Union Types)
- 定義: 允許變數同時持有多種型別的值。
- 優點: 提高程式碼的靈活性和可讀性。
- 範例:
PHP
function greet(string|int $name): string { return "Hello, $name!"; }
- 圖示:(圖示可顯示一個變數可以同時包含字串或整數型別的示意圖)
2. 具名參數 (Named Arguments)
- 定義: 允許以名稱來傳遞參數,而不必按照順序。
- 優點: 提高程式碼的可讀性,尤其是當函式有許多參數時。
- 範例:
PHP
function createProduct(string $name, float $price, int $quantity = 1): Product { // ... } createProduct(price: 19.99, name: 'T-shirt');
3. match 表達式
- 定義: 類似於 switch 語句,但語法更簡潔且功能更強大。
- 優點: 提高程式碼的可讀性和效率。
- 範例:
PHP
$shape = 'circle'; $area = match ($shape) { 'circle' => pi() * $radius ** 2, 'rectangle' => $width * $height, default => throw new InvalidArgumentException("Unknown shape: $shape") };
4. 屬性 (Attributes)
- 定義: 一種用於在類、方法、屬性等元素上添加元數據的方式。
- 優點: 提高程式碼的可讀性和可維護性。
- 範例:
PHP
#[Attribute] class FooAttribute {} #[Foo] class MyClass {}
5. 構造函式屬性提升 (Constructor Property Promotion)
- 定義: 可以直接在構造函式中聲明並初始化屬性。
- 優點: 簡化程式碼,減少重複。
- 範例:
PHP
class User { public function __construct(public string $name, public int $age) {} }
6. null 安全操作符 (Nullsafe Operator)
- 定義: 用於安全地訪問可能為 null 的屬性或方法。
- 優點: 減少 null pointer exceptions。
- 範例:
PHP
$user->address->city ?? 'Unknown';
7. 弱映射 (Weak Maps)
- 定義: 一種特殊的映射,其鍵為弱引用。當鍵不再被引用時,該鍵值對將自動被垃圾回收。
- 優點: 避免記憶體洩漏。
8. 即時編譯 (Just-In-Time Compilation, JIT)
- 定義: 將 PHP 程式碼編譯成機器碼,以提高執行效率。
- 優點: 顯著提升程式性能,尤其是對於 I/O 密集型應用。
9. 其他特性
- 新增函式:
str_contains()
,str_starts_with()
,str_ends_with()
等。 - 類型系統改進:
mixed
型別、可變參數型別等。
PHP8 引入了這三個新的字串處理函數,大幅簡化了我們判斷字串是否包含、以什麼開頭或以什麼結尾的邏輯。它們的設計更直觀,也更符合自然語言的表達方式。
str_contains()
函數
- 功能: 判斷一個字串是否包含另一個子字串。
- 語法:
bool str_contains(string $haystack, string $needle)
- 參數:
haystack
: 要搜尋的字串。needle
: 要查找的子字串。
- 返回值:
- 如果
haystack
包含needle
,則返回true
,否則返回false
。
- 如果
示例:
PHP
$text = "Hello, world!";
if (str_contains($text, "world")) {
echo "字串包含 'world'";
}
str_starts_with()
函數
- 功能: 判斷一個字串是否以另一個字串開頭。
- 語法:
bool str_starts_with(string $haystack, string $needle)
- 參數:
haystack
: 要檢查的字串。needle
: 要比較開頭的字串。
- 返回值:
- 如果
haystack
以needle
開頭,則返回true
,否則返回false
。
- 如果
示例:
PHP
$filename = "image.jpg";
if (str_starts_with($filename, "image")) {
echo "檔案名稱以 'image' 開頭";
}
str_ends_with()
函數
- 功能: 判斷一個字串是否以另一個字串結尾。
- 語法:
bool str_ends_with(string $haystack, string $needle)
- 參數:
haystack
: 要檢查的字串。needle
: 要比較結尾的字串。
- 返回值:
- 如果
haystack
以needle
結尾,則返回true
,否則返回false
。
- 如果
示例:
PHP
$email = "user@example.com";
if (str_ends_with($email, ".com")) {
echo "電子郵件地址為 .com";
}
為什麼要使用這些函數?
- 簡潔易懂: 函數名稱直觀,表達意圖清晰。
- 提高可讀性: 讓程式碼更易於理解和維護。
- 避免冗餘: 不需要自己寫複雜的判斷邏輯。
- 性能優化: 這些函數經過優化,執行效率更高。
與舊版 PHP 的比較
在 PHP8 之前,我們通常使用 strpos()
、substr()
等函數來實現類似的功能,但這些方法寫起來相對繁瑣,且容易出錯。而新的三個函數提供了更簡潔、更安全的方式。
總結
str_contains()
、str_starts_with()
、str_ends_with()
是 PHP8 中非常實用的字串處理函數,它們可以大大簡化我們的程式碼,提高開發效率。在處理字串相關的邏輯時,強烈建議使用這些函數。
沒有留言:
張貼留言