iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0
Modern Web

PHP 新手自學筆記系列 第 11

【Day 11】變數作用域

  • 分享至 

  • xImage
  •  

文章參考:PHP變量作域

PHP 的變數作用域:

函式內宣告的變數 → 區域作用域

函式外宣告的變數 → 全域作用域

函式內不會自動繼承全域變數

global

這是一個範例

<?php
$table = 1; // 全域變數

function test()
{ 
    $table = 1; // 函式內變數
}
?>

全域變數 : 除了函式以外都可以知道這個變數的存在並取用
區域變數 : 只有函式內可以知道這個變數,且生命週期只限於這個函式


<?php
$table = 1; // 全域變數

function test()
{ 
    echo $table; // 取全域變數table,但函式不知道這個變數的存在
}
?> //輸出空字串,php不會跳error
<?php
$table = 1; // 全域變數

function test()
{ 
     global $table; //使用global關鍵字
     echo $table;
}
test();//呼叫函式
?> //輸出1

說明 : global 這個關鍵字是告訴函式 我想使用這個全域變數 ,只能引用已存在的全域變數
ps 如果函式內用 global 引用一個全域尚未初始化的變數,它的值會是 null/空字串,不會報錯

function test()
{ 
    global $desk; // 引用尚未初始化的全域變數
    echo $desk;   // 輸出空字串
}
test();

global也可以用來修改全域變數的值

<?php
$table = 1; // 全域變數

function test()
{
    global $table; // 引用全域變數
    echo $table;   // 讀取全域變數
    $table = 5;    // 可以修改全域變數
}

test();           // 輸出 1
echo $table;      // 輸出 5,已被函式修改
?>

說明 : 函式外的 test() 這邊會輸出1是因為呼叫函數時已經先被echo後才修改
函式外的 echo $table 輸出5是因為在函式內我引用table且把她修改成5 在函式的echo $table之後

static

static 這個關鍵字可以直接在函式內定義新變數,且每次呼叫時都不會被重置

function testStatic() {
    static $count = 0;  // 只在第一次呼叫時初始化
    $count++;
    echo $count . "\n";
}

testStatic(); // 1
testStatic(); // 2
testStatic(); // 3

這裡 $count 只存在於 counter() 函式內
每次呼叫函式 $count 都保留上次的值
如果不用 static,每次呼叫都會從 0 開始

不用static的普通變數

function normalVar() {
    $count = 0;  // 普通區域變數,每次呼叫函式都重新初始化
    $count++;
    echo $count . "\n";
}

normalVar(); // 輸出 1
normalVar(); // 再次呼叫,重新初始化 -> 輸出 1
normalVar(); // 再次呼叫 -> 輸出 1

普通變數:
作用範圍:只在函式內有效,函式外無法存取。
生命週期:函式每次被呼叫時,變數都重新建立,結束函式後就消失。
值不保留:函式下一次呼叫時,變數從頭開始。

變數類型 作用範圍 是否保留值
普通區域變數 函式內 每次呼叫都重置
static 變數 函式內 保留上次值
global 變數 全域 永遠保留全域值

明天學 php內建函式/images/emoticon/emoticon13.gif


上一篇
【Day 10】PHP 函式(function)
下一篇
【Day12】PHP 內建函式 (字串)
系列文
PHP 新手自學筆記12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言