create_function() 允許執行時根據字串動態建立匿名函數(Lambda),但已於 PHP 7.2 棄用、PHP 8.0 移除。本文說明歷史用法、安全風險與現代替代方案(匿名函數、箭頭函數)。
<?php
// 建立比較字串長度的匿名函數
$lambda = create_function('$a,$b', 'return strlen($a) - strlen($b);');
$array = ['really long string here,boy', 'this', 'middling length', 'larger'];
usort($array, $lambda);
print_r($array);
/*
輸出:
Array
(
[0] => this
[1] => larger
[2] => middling length
[3] => really long string here,boy
)
*/
?>
eval() 執行,若參數來自使用者輸入極易導致程式碼注入。{closure} 無檔案行號。use 語法。<?php
// PHP 5.3+ 匿名函數
$lambda = function($a, $b) {
return strlen($a) - strlen($b);
};
// PHP 7.4+ 箭頭函數(隱含按值捕獲外部變數)
$lambda = fn($a, $b) => strlen($a) - strlen($b);
usort($array, $lambda);
print_r($array);
?>
<?php
// 根據條件建立不同處理函數
function createProcessor(string $type): callable {
return match($type) {
'trim' => fn($v) => trim($v),
'upper' => fn($v) => strtoupper($v),
'lower' => fn($v) => strtolower($v),
'length' => fn($v) => strlen($v),
default => fn($v) => $v,
};
}
$proc = createProcessor('upper');
echo $proc('hello'); // HELLO
?>
create_function() 為歷史產物,現代 PHP 應完全改用匿名函數或箭頭函數,獲得更好效能、安全性、除錯體驗與閉包支援。希望本文對您的 PHP 程式設計有所幫助。