在這次的單元中,我們將介紹一些大家常用且經常看到的函數,這些函數雖然常見,但也容易搞混。此外,我還會分享一些我在面試中遇到的相關問題。
相較於一般函數,匿名函數是沒有名稱的函數,且使用範圍廣泛。最基本的應用是將匿名函數的運算結果直接返回作為參數。對於較複雜的應用,則可以搭配閉包來使用。以下是幾個例子
$greeting = 'Hello, world!';
$closure = function() use ($greeting) {
echo $greeting;
};
$closure(); // 输出 "Hello, world!"
$fullPath = '<http://localhost>';
$pathLen = 'mypath';
$iterator = map(
dir_iterator($fullPath, $context),
function ($file) use ($fullPath, $pathLen) {
return substr("{$fullPath}/{$file}", $pathLen);
}
);
這三個函數都很常被用來進行空值相關的判斷,但其實有微妙的不同。
一般來說,變數的名稱前會加上 $
符號。如果在變數名稱前再加一個 $
,則會將原本變數的值視為變數名稱,形成一個新的變數。由於這個變數的名稱是可變的,因此稱為可變變數。
舉例來說:
$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()
函數來創建一個空的陣列,這是 PHP 中較舊的語法。
在 PHP 5.4 以後,新增了更易讀的語法,我們可以直接使用 []
來創建一個空的陣列。
根據不同的 PHP 版本,可能會遇到必須使用 empty
來判斷空值的情況。以 PHP 7.4 為例:
$XFF = $_SERVER['HEADER'] ? $_SERVER['HEADER'] . ', ' : '';
→ 會拋出錯誤
$XFF = !empty($_SERVER['HEADER']) ? $_SERVER['HEADER'] . ', ' : '';
→ 可以正常運作
Nullsafe 是 PHP 8.0 中新增的特性,可以幫助我們更方便地判斷參數的內容是否為空值。
$result = $propertyOne ?? $propertyTwo;