網頁設計 EP04-PHP 變數範圍

更新 發佈閱讀 13 分鐘

上一篇了解到PHP的基本語法與變數,事不宜遲,接下來就要更深入了解變數的變數範圍。

網頁設計 EP03-PHP基本語法與變數

變數範圍(scope)

變數的範圍會影響在程式的可見性與週期。

分為全域變數、區域變數以及在其他語言比較少被提及的靜態變數。

vocus|新世代的創作平台

全域變數(global variable)

在函數外部宣告的變數為全域變數,宣告方式無需使用特殊關鍵字,除了函式和類別內部,整個PHP檔案的其他部份都可以讀取這個變數。

<?php
$a = 5;//全域變數
$b = 6;//全域變數
function test(){

echo $a+$b;
}
echo $a+$b;//輸出 11
test()
/*
警告:未定義變數 $a,位於D:\xampp\htdocs\test\test2.php第6行。

警告:未定義變數 $b,位於D:\xampp\htdocs\test\test2.php第6行。​
*/
?>

區域變數(local variable)

在函數內部宣告的變數為區域變數,宣告方式無需使用特殊關鍵字,且只能在函數或類別內部使用(不同的function可宣告相同名稱的區域變數),當宣告變數的function結束時代表該變數的生命週期結束,而想要在區域範圍內讀取全域變數可透過以下三種方法讀取:

透過函式參數傳遞

當函式被呼叫時,傳入全域變數進入區域範圍變成區域變數。

<?php
$a = 5;//全域變數
$b = 6;//全域變數
function test($a, $b){

echo $a+$b;//輸出 11
}

test($a, $b);
?>

global關鍵字

把全域變數拉進來,在此修改$b,全域變數$b也會改變。

<?php
$a = 5;//全域變數
$b = 6;//全域變數

function test(){
$a = 10;//區域變數
$b = 13;//區域變數
echo $a+$b;//輸出 23

global $a;//在區域範圍存取全域變數
global $b;//在區域範圍存取全域變數
echo $a+$b;//輸出 11
}

echo $a+$b;//輸出 11

test();
?>

GLOBALS陣列

$GLOBALS 是PHP的一個超級全域變數,用來記錄各種全域變數的一個陣列,在所有作用域都可以被讀取。

<?php
$a = 5;
$b = 6;

function test(){
$a = 10;
$b = 13;
echo $a+$b;//輸出 23
echo $GLOBALS['a']+$GLOBALS['b'];//輸出 11
}
echo $a+$b;//輸出 11
test();
echo $a+$b;//輸出 11
?>

靜態變數(static variable)

在區域變數的部分提到,當function執行結束時代表著區域變數的生命週期結束,不過有時候希望區域變數不因function結束而消滅,這時就可以在第一次宣告該區域變數前加上 static 關鍵字,接下來每次呼叫function時都能包含上次執行所得到的值,加入關鍵字後生命週期變成PHP程式執行完才結束。

<?php
function test(){
$a = 10;
$b = 13;
static $c = 0;
echo $c;
$c++;
}

test();//輸出 0
test();//輸出 1
test();//輸出 2
?>

超全域變數(Superglobals)

PHP內建一系列全域變數,稱為超全域變數,無需使用 global $variable 即可讀取。

(程式碼僅測試學習用,暫不考慮資安問題)

$GLOBALS

儲存各種全域變數的關聯陣列,依鍵值(變數名稱)取值,在所有作用域都可以被讀取。

<?php
$a = 5;
$b = 6;

function test(){
$a = 10;
$b = 13;
echo $a+$b;//輸出 23
echo $GLOBALS['a']+$GLOBALS['b'];//輸出 11
}
echo $a+$b;//輸出 11
test();
echo $a+$b;//輸出 11
?>

$_SERVER

儲存與伺服器相關的變數,例如伺服器名稱、當前程式執行路徑與文件根目錄等等。

詳情可參考官方文檔 : https://www.php.net/manual/zh/reserved.variables.server.php

<?php
echo $_SERVER ['PHP_SELF'] ;//當前程式執行路徑
echo $_SERVER ['SERVER_NAME'] ;//伺服器名稱
echo $_SERVER ['HTTP_HOST'] ;//來自目前請求標頭(Header)的 Host 內容(包含埠號,如 :8080)。
echo $_SERVER ['SCRIPT_NAME'] ;//當前程式執行路徑
echo $_SERVER ['DOCUMENT_ROOT'];//文件根目錄
?>

$_REQUEST

該超全域變數包含 : $_GET、$_POST 和 $_COOKIE。

<?php
echo $_REQUEST["pw"];
?>

$_POST

常用於收集表單的傳遞的資料,以下範例透過<form></form>標籤示範,將資料放在HTTP傳輸封包的body中送出。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="http://localhost:8080/test/test2.php" method = "POST">
        <label>password</label>
        <input type="text" name="pw">
        <br>
        <button>Login</button>
    </form>
</body>
</html>

將資料透過POST方法傳遞到test2.php。

<?php
echo $_POST["pw"];
?>

可以看到網址的尾巴並沒有剛剛傳遞過來的參數。

vocus|新世代的創作平台

$_GET

常用於收集表單的傳遞的資料,將資料放在請求網址的網址參數列 ( URL GET parameters ) 送出。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="http://localhost:8080/test/test2.php" method = "GET">
        <label>password</label>
        <input type="text" name="pw">
        <br>
        <button>Login</button>
    </form>
</body>
</html>

將資料透過GET方法傳遞到test2.php。

<?php
echo $_GET["pw"];
?>

可以看到網址的尾巴有剛剛傳遞過來的參數。

vocus|新世代的創作平台

$_FILES

儲存透過表格HTTP POST方法傳送檔案的資訊,是一個關聯陣列,包含檔案原始名稱、檔案類型、檔案大小、錯誤代碼與伺服器上的暫存檔案名。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <form action="http://localhost:8080/test/test2.php" method = "POST" enctype="multipart/form-data">
        <label>password</label>
        <input type="text" name="pw">
        <br>
        <input type="file" name="rawfile">
        <button>Login</button>
    </form>
</body>
</html>

設定 enctype 屬性為 multipart/form-data 將資料透過POST方法傳遞到test2.php。

<?php//假設上傳Claude assistant.txt
echo $_FILES['rawfile']['name'];//檔案原始名稱
echo $_FILES['rawfile']['size'];//檔案大小
echo $_FILES['rawfile']['tmp_name'];//伺服器上暫存檔案名
echo $_FILES['rawfile']['type'];//檔案類型
echo $_FILES['rawfile']['error'];//錯誤代碼
?>

$_ENV

用來存取環境變數。

<?php
echo getenv('USERNAME');
?>

除了用getenv()函式搭配鍵值取得環境變數外,也可以透過php.ini設定variables_order="EGPCS" (E:Environment、G:GET、P:POST、C:Cookie,S:Server),藉由 print_r 函式取得所有環境變數,環境變數詳細內容可自行嘗試,礙於篇幅不一一做演示。

<?php
print_r($_ENV);
?>

$_COOKIE

Cookie全名為 HTTP COOKIE,是一種由網站傳送至用戶瀏覽器的小型資料,用於記錄用戶的瀏覽活動和偏好設定,像是登入資料與購物車等等,讓你在瀏覽網頁時能更流暢、方便,有更好的用戶體驗。

了解完Cookie的概念後,$_COOKIE這個超全域變數用於儲存Cookie資料,是一個關聯陣列。

<?php
setcookie("password", $_REQUEST["pw"],time()+360);
echo $_COOKIE['password'];
?>

$_SESSION

Session則是與Cookie相反,存在伺服器端,用於儲存Session資料,是一個關聯陣列。

<?php
session_start();//啟動頁面的 session 功能
setcookie("password", $_REQUEST["pw"],time()+360);
echo $_COOKIE['password'];
$_SESSION['password'] = $_REQUEST['pw'];//新增一筆資料
echo $_SESSION['password'];
?>

本篇文章到這裡就結束了,探索PHP的旅程還沒有結束,接下來會繼續前往新大陸:邏輯控制與運算子,如果喜歡我的文章或覺得有用的話,歡迎動動手指點擊愛心,你/妳的支持是我最大的動力,我們下篇文章見🙌。

留言
avatar-img
逃的沙龍
3會員
13內容數
分享學習路上的內容與心得
逃的沙龍的其他內容
2026/02/13
本篇文章將帶你快速瞭解 PHP 的基本語法,包含標籤、分號、列印 (echo)、註解、變數宣告、命名規則、常見資料型別 (字串、整數、浮點數、布林值、null) 以及型別轉換 (casting) 的應用。適合剛接觸 PHP 的初學者,為後續的程式撰寫奠定基礎。
Thumbnail
2026/02/13
本篇文章將帶你快速瞭解 PHP 的基本語法,包含標籤、分號、列印 (echo)、註解、變數宣告、命名規則、常見資料型別 (字串、整數、浮點數、布林值、null) 以及型別轉換 (casting) 的應用。適合剛接觸 PHP 的初學者,為後續的程式撰寫奠定基礎。
Thumbnail
2026/02/11
本篇文章將教學如何將 Visual Studio Code (VS Code) 與 XAMPP 伺服器環境結合,設定 VS Code 以便能順暢執行 PHP 程式。內容涵蓋 VS Code 插件安裝、連接埠 (Port) 設定、DocumentRoot 設定,以及實際執行你的第一個 PHP 程式。
Thumbnail
2026/02/11
本篇文章將教學如何將 Visual Studio Code (VS Code) 與 XAMPP 伺服器環境結合,設定 VS Code 以便能順暢執行 PHP 程式。內容涵蓋 VS Code 插件安裝、連接埠 (Port) 設定、DocumentRoot 設定,以及實際執行你的第一個 PHP 程式。
Thumbnail
2026/02/10
XAMPP 是一款完全免費且開源的跨平台 Web 伺服器軟體解決方案套件。它的名字是一個縮寫,代表了其核心組成部分: X (Cross-platform): 跨平台,支援 Windows、Linux 和 macOS。 A (Apache): 全球使用最廣泛的 Web 伺服器軟體。 M (Mar
Thumbnail
2026/02/10
XAMPP 是一款完全免費且開源的跨平台 Web 伺服器軟體解決方案套件。它的名字是一個縮寫,代表了其核心組成部分: X (Cross-platform): 跨平台,支援 Windows、Linux 和 macOS。 A (Apache): 全球使用最廣泛的 Web 伺服器軟體。 M (Mar
Thumbnail
看更多
你可能也想看
Thumbnail
(Part 1)交友軟體配對率激增!吸引女生的自我介紹這樣寫!|UC Training情感教育 在前一篇文章中我們聊到了在交友軟體上照片的擺放順序與邏輯,在本篇文章中Daniel將分享在交友軟體個人頁面中另一個很重要的部分「自我介紹」。 如果你還沒看過的朋友,可以點選下面的連結前往閱讀,或是你也可以
Thumbnail
(Part 1)交友軟體配對率激增!吸引女生的自我介紹這樣寫!|UC Training情感教育 在前一篇文章中我們聊到了在交友軟體上照片的擺放順序與邏輯,在本篇文章中Daniel將分享在交友軟體個人頁面中另一個很重要的部分「自我介紹」。 如果你還沒看過的朋友,可以點選下面的連結前往閱讀,或是你也可以
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
話說移民到方格子至今又寫了將近兩百一十幾篇文,以每篇文平均一千字上下計之,差不多新增了十七、八萬字。 嗯,可以出三本書了。而如果我是什麼哀居網美,出那種沒幾頁就放一張奶圖的半寫真集式日記,約四萬字就可以出一本,那我就能出四本。 內向仔的社交主場 每天寫文完成被動篩選
Thumbnail
話說移民到方格子至今又寫了將近兩百一十幾篇文,以每篇文平均一千字上下計之,差不多新增了十七、八萬字。 嗯,可以出三本書了。而如果我是什麼哀居網美,出那種沒幾頁就放一張奶圖的半寫真集式日記,約四萬字就可以出一本,那我就能出四本。 內向仔的社交主場 每天寫文完成被動篩選
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
本文介紹如何使用Vite建立前端開發初始檔案,並加入Tailwindcss的教學。透過指令和配置檔,讓你能快速建立個人專案的開發環境,並學習如何加入全域的Tailwindcss樣式。還有影片教學、資源連結和更多相關教學文章等,幫助你進一步學習。
Thumbnail
本文介紹如何使用Vite建立前端開發初始檔案,並加入Tailwindcss的教學。透過指令和配置檔,讓你能快速建立個人專案的開發環境,並學習如何加入全域的Tailwindcss樣式。還有影片教學、資源連結和更多相關教學文章等,幫助你進一步學習。
Thumbnail
在CSS Battle的第153題,我們會使用grid、css選擇器、偽元素等技巧來解決西洋棋盤的排版問題。這篇文章分享了完整的解法,包括選擇器使用、偽元素的應用以及其他排版技巧,並激勵讀者分享自己的解法。
Thumbnail
在CSS Battle的第153題,我們會使用grid、css選擇器、偽元素等技巧來解決西洋棋盤的排版問題。這篇文章分享了完整的解法,包括選擇器使用、偽元素的應用以及其他排版技巧,並激勵讀者分享自己的解法。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News