首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 函數進階:作用域、靜態變量、變量函數、回調與內部函數分類

     編輯:PHP 相關知識

函數聲明基礎

function sum(int $x, int $y): int {
    return $x * $x + $y * $y;
}
echo sum(3, 4); // 25

變量作用域鐵律

  1. 函數內部無法直接訪問外部變量(除非 global 或 $GLOBALS)
  2. 函數外部無法直接訪問內部變量(除非 return 或引用傳遞)
  3. 參數傳遞默認按值(複製副本),對象/資源傳遞的是句柄引用

global 關鍵字實戰

$a = 10;
function demo() {
    global $a;
    $a += 10;
    echo $a . " demo\n"; // 20
}
demo();
echo $a . " global\n";   // 20
demo();                  // 30
echo $a . " again\n";    // 30

靜態變量:函數級「單例」狀態

function counter() {
    static $count = 0; // 僅初始化一次
    $count++;
    echo $count . "\n";
}
counter(); // 1
counter(); // 2
counter(); // 3
  • 存儲在靜態存儲區,生命周期 = 整個腳本運行期間
  • 僅在聲明所在函數可見,實現封裝狀態
  • 遞歸、累加器、緩存、單次初始化常用

變量函數:動態調用

function one($a, $b) { return $a + $b; }
function two($a, $b) { return $a * $a + $b * $b; }
function three($a, $b) { return $a ** 3 + $b ** 3; }

$func = 'two';
echo $func(3, 4); // 25

// 陣列調用
$map = ['one' => 'one', 'two' => 'two'];
echo $map['two'](3, 4); // 25

內部函數參數分類識讀手冊

原型特徵含義調用示例
mixed $arg接受任意類型var_dump($any)
&$arg引用傳遞(必須傳變量)sort($arr) 修改原數組
$arg = default可選參數,有默認值json_encode($data, JSON_PRETTY_PRINT)
...$args可變參數(打包為數組)array_merge(...$arrays)
callable $cb回調類型聲明array_filter($arr, fn($v)=>$v>0)

func_* 族函數:無簽名可變參數(PHP 5.6 前)

function sumAll() {
    $sum = 0;
    for ($i = 0; $i < func_num_args(); $i++) {
        $sum += func_get_arg($i);
    }
    return $sum;
}
echo sumAll(1,2,3,4,5); // 15

// 現代寫法(PHP 5.6+)
function sumAll(...$nums) {
    return array_sum($nums);
}

回調函數四種可調用類型

// 1. 普通函數名字符串
'strlen'

// 2. 靜態方法
'MyClass::staticMethod'

// 3. 實例方法
[$obj, 'method']

// 4. 匿名函數 / 閉包
fn($x) => $x * 2
function($x) { return $x * 2; }

// 5. 可調用對象(實現 __invoke)
class Multiplier {
    public function __invoke($x) { return $x * $this->factor; }
}
$double = new Multiplier(2);
array_map($double, [1,2,3]);

內置排序函數對比(引用修改原數組)

函數排序依據保留鍵穩定性
sort值升序❌ 重建索引不穩定
rsort值降序❌不穩定
asort值升序✅穩定 (PHP 8+)
arsort值降序✅穩定
ksort鍵升序✅穩定
krsort鍵降序✅穩定
usort用戶回調比較值❌不穩定
uasort用戶回調比較值✅穩定
uksort用戶回調比較鍵✅穩定

array_filter 回調實戰

$data = [1, 2, -3, 4, -5, 6, -7, 8, 9];

// 保留偶數
$even = array_filter($data, function($n) {
    return $n % 2 === 0;
});
// [1 => 2, 3 => 4, 5 => 6, 7 => 8]

// 保留鍵為偶數的元素
$evenKeys = array_filter($data, function($v, $k) {
    return $k % 2 === 0;
}, ARRAY_FILTER_USE_KEY);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved