文章參考:PHP變量作域
PHP 的變數作用域:
函式內宣告的變數 → 區域作用域
函式外宣告的變數 → 全域作用域
函式內不會自動繼承全域變數
這是一個範例
<?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 這個關鍵字可以直接在函式內定義新變數,且每次呼叫時都不會被重置
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內建函式