PHP系列 - 3: 常用的基礎函數

PHP系列 - 3: 常用的基礎函數

更新於 發佈於 閱讀時間約 5 分鐘

在這次的單元中,我們將介紹一些大家常用且經常看到的函數,這些函數雖然常見,但也容易搞混。此外,我還會分享一些我在面試中遇到的相關問題。

匿名函數與閉包

相較於一般函數,匿名函數是沒有名稱的函數,且使用範圍廣泛。最基本的應用是將匿名函數的運算結果直接返回作為參數。對於較複雜的應用,則可以搭配閉包來使用。以下是幾個例子

  1. 簡單使用
    $greeting = 'Hello, world!';
    $closure = function() use ($greeting) {
    echo $greeting;
    };
    $closure(); // 输出 "Hello, world!"
  2. 較複雜的使用
    $fullPath = '<http://localhost>';
    $pathLen = 'mypath';
    $iterator = map(
    dir_iterator($fullPath, $context),
    function ($file) use ($fullPath, $pathLen) {
    return substr("{$fullPath}/{$file}", $pathLen);
    }
    );
  3. 對於其他更複雜的用法,此處不再詳談,可以參考附錄中的相關資料。

isset()、 empty() 和 is_null()

這三個函數都很常被用來進行空值相關的判斷,但其實有微妙的不同。

  • isset():檢查變數是否存在 並且 是否不為 Null
  • empty():檢查變數是否不存在 或是 其值為空字符串、Null、0
  • is_null():僅檢查變數是否為 Null

可變變數 $$

一般來說,變數的名稱前會加上 $ 符號。如果在變數名稱前再加一個 $,則會將原本變數的值視為變數名稱,形成一個新的變數。由於這個變數的名稱是可變的,因此稱為可變變數。

舉例來說:

$a = 'b';
$b = 'c';
$c = 'test';
echo $$$a; //輸出為 $($($a)) = $($b)) = $c= 'test'

引用赋值 &

一般來說,我們使用 = 來賦值,並為變數分配相對應的記憶體空間,這是最基本的方法。

在 PHP 中,引用賦值是一種特殊的賦值方式,可以讓不同的變數指向同一個值,使用同一個記憶體空間。在這種情況下,當其中一個變數的值改變時,另一個變數的值也會隨之改變。如果不想繼續引用,也可以使用 unset() 來取消引用。

舉例來說:

$a1 = '123';
$a2 = '123';
// a1、a2雖然都是 '123',但其實各自獨立、占有不同的記憶體空間
$a1 = '456';
// 此時 a2 還是'123'

$b1 = '123';
$b2 = &$b1;
// b1、b2都是 '123',並使用相同的記憶體空間
$b2 = '456';
// b1是 '456'

array

  1. 建立 array 的新舊語法

我們可以使用 array() 函數來創建一個空的陣列,這是 PHP 中較舊的語法。

在 PHP 5.4 以後,新增了更易讀的語法,我們可以直接使用 [] 來創建一個空的陣列。

  1. 判斷空值

根據不同的 PHP 版本,可能會遇到必須使用 empty 來判斷空值的情況。以 PHP 7.4 為例:

$XFF = $_SERVER['HEADER'] ? $_SERVER['HEADER'] . ', ' : ''; → 會拋出錯誤

$XFF = !empty($_SERVER['HEADER']) ? $_SERVER['HEADER'] . ', ' : ''; → 可以正常運作

Nullsafe ??

Nullsafe 是 PHP 8.0 中新增的特性,可以幫助我們更方便地判斷參數的內容是否為空值。

$result = $propertyOne ?? $propertyTwo;

參考資料:

  1. https://www.cnblogs.com/echojson/p/10957362.html
  2. https://blog.csdn.net/youcijibi/article/details/88029596
  3. https://www.php.net/manual/zh/language.operators.assignment.php
  4. https://docfunc.com/posts/30/php-8-中的新特性-五-nullsafe-operator-post
avatar-img
林柏宇的沙龍
2會員
41內容數
test
留言
avatar-img
留言分享你的想法!
林柏宇的沙龍 的其他內容
JWT(JSON Web Token)是基於 JSON 格式的開放標準,主要用於身份驗證與權限確認。本文介紹了JWT的基本結構,並闡述其特點,如降低資料庫壓力、靈活性及無狀態性。JWT 特別適用於分佈式系統。本篇將協助讀者深入理解 JWT 的重要性與實際應用。
本文介紹了容器的基本概念、組成部分以及其在應用開發中的重要性,特別是對初階和高階工程師的影響。透過深入探討容器的優點,以及Docker、Kubernetes和ArgoCD等相關技術,幫助讀者理解容器化的應用與管理,進而簡化開發過程並提高效率。適合對容器技術感興趣的開發者從零開始學習與掌握。
本文探討自動化測試的核心理念與實際應用,涵蓋如何模擬運行環境、確保程式碼在各種情境下的穩定性,以及進行錯誤處理的方法。文中指出自動化測試的各種優點,並提到設計測試的注意事項。透過使用相關工具和方法,讀者可以有效進行功能測試,並掌握相關技巧以應對常見問題,讓開發過程更為順利。
JWT(JSON Web Token)是基於 JSON 格式的開放標準,主要用於身份驗證與權限確認。本文介紹了JWT的基本結構,並闡述其特點,如降低資料庫壓力、靈活性及無狀態性。JWT 特別適用於分佈式系統。本篇將協助讀者深入理解 JWT 的重要性與實際應用。
本文介紹了容器的基本概念、組成部分以及其在應用開發中的重要性,特別是對初階和高階工程師的影響。透過深入探討容器的優點,以及Docker、Kubernetes和ArgoCD等相關技術,幫助讀者理解容器化的應用與管理,進而簡化開發過程並提高效率。適合對容器技術感興趣的開發者從零開始學習與掌握。
本文探討自動化測試的核心理念與實際應用,涵蓋如何模擬運行環境、確保程式碼在各種情境下的穩定性,以及進行錯誤處理的方法。文中指出自動化測試的各種優點,並提到設計測試的注意事項。透過使用相關工具和方法,讀者可以有效進行功能測試,並掌握相關技巧以應對常見問題,讓開發過程更為順利。