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

PHP 變數進階特性:可變變數、變數函數、超全域陣列與未宣告變數自動建立機制

     編輯:PHP 相關知識

1. 可變變數(Variable Variables)

將變數的值作為另一個變數的名稱:

<?php
$a = 'hello';
$$a = 'world';      // 等同於 $hello = 'world';
echo "$a ${$a}";    // hello world
echo "$a $hello";   // hello world

// 多層級
$b = 'a';
$$$b = 'test';      // $hello = 'test';
echo $hello;        // test
?>

限制:不可用於 $this 與超全域變數($_GET、$_POST 等)。

2. 變數函數(Variable Functions)

變數後加括號即視為函數呼叫:

<?php
function foo() { echo "In foo()\n"; }
function bar() { echo "In bar()\n"; }

$func = 'foo';
$func(); // In foo()

$func = 'bar';
$func(); // In bar()

// 類方法
class Test {
    public static function staticMethod() { echo "Static\n"; }
    public function instanceMethod() { echo "Instance\n"; }
}
$classMethod = ['Test', 'staticMethod'];
$classMethod(); // Static

$obj = new Test();
$instanceMethod = [$obj, 'instanceMethod'];
$instanceMethod(); // Instance
?>

3. 典型應用:動態表單欄位處理

<?php
// $_POST = ['name'=>'John', 'email'=>'john@example.com', 'age'=>'25']
foreach ($_POST as $key => $value) {
    $$key = $value; // 自動建立 $name, $email, $age
}
echo "Name: $name, Email: $email, Age: $age";
?>

4. 未宣告變數直接賦值的行為

PHP 允許未宣告變數直接賦值(隱式建立),這與 C#/Java 等強型別語言不同:

<?php
class Demo {
    public $name;
    public function show() {
        echo isset($this->name) ? $this->name : '未設定';
    }
}
$obj = new Demo();
$obj->show(); // 未設定
$obj->name = '現在有值了';
$obj->show(); // 現在有值了
?>

注意:雖然方便,但易導致拼字錯誤難以發現。建議開啟 error_reporting(E_ALL) 並配合 IDE 靜態分析。

5. 超全域變數與作用域

  • $GLOBALS、$_SERVER、$_GET、$_POST、$_FILES、$_COOKIE、$_SESSION、$_REQUEST、$_ENV 在所有作用域自動可用。
  • 函數內部預設無法存取外部變數,需 global $var 或 use ($var)(閉包)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved