ขอบเขตตัวแปร: ภายในและส่วนกลาง
ทำความเข้าใจว่า PHP แยกขอบเขตของฟังก์ชันอย่างไร และวิธีใช้คีย์เวิร์ด global
ขอบเขตตัวแปร: ภายในและส่วนกลาง เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
ขอบเขตตัวแปรใน PHP
ใน PHP ตัวแปรทุกตัวมีขอบเขต — บริเวณของโค้ดที่สามารถเข้าถึงตัวแปรนั้นได้
- ตัวแปรที่สร้างนอกฟังก์ชันอยู่ในขอบเขตส่วนกลาง
- ตัวแปรที่สร้างภายในฟังก์ชันอยู่ในขอบเขตเฉพาะที่
- PHP ไม่มีขอบเขตระดับบล็อก (NOT) ซึ่งต่างจาก C หรือ JavaScript
ขอบเขตเฉพาะที่
ตัวแปรภายในฟังก์ชันเป็นตัวแปรเฉพาะที่ — ตัวแปรเหล่านี้จะหายไปเมื่อฟังก์ชันส่งค่ากลับ:
<?php
function compute(): void {
$result = 42; // local variable
echo $result; // 42
}
compute();
echo $result ?? 'undefined'; // undefined — $result is goneตัวแปรส่วนกลางไม่แสดงให้เห็นโดยอัตโนมัติ (NOT)
ต่างจากภาษาหลายภาษา ฟังก์ชัน PHP จะไม่เห็นตัวแปรส่วนกลางโดยค่าเริ่มต้น — คุณต้องนำเข้าตัวแปรเหล่านั้นอย่างชัดเจน:
<?php
$message = 'Hello';
function printMessage(): void {
echo $message ?? 'not visible'; // 'not visible'
// $message from global scope is not accessible here
}คีย์เวิร์ด global
ใช้ global $varName ภายในฟังก์ชันเพื่อเข้าถึงตัวแปรส่วนกลาง:
<?php
$counter = 0;
function increment(): void {
global $counter;
$counter++;
}
increment();
increment();
echo $counter; // 2ตัวแปรส่วนกลางพิเศษ $GLOBALS
$GLOBALS เป็นอาร์เรย์ที่เก็บตัวแปรส่วนกลางทั้งหมด — เข้าถึงได้จากทุกที่โดยไม่ต้องใช้คีย์เวิร์ด global:
<?php
$total = 100;
function addTax(): void {
$GLOBALS['total'] *= 1.18; // 18% tax
}
addTax();
echo $total; // 118เหตุผลที่ควรหลีกเลี่ยง global
การใช้ global มากเกินไปจะสร้างการพึ่งพาที่ซ่อนอยู่ — ทำให้ฟังก์ชันทดสอบและแก้ไขข้อบกพร่องได้ยาก ควรส่งค่าเป็นอาร์กิวเมนต์แทน:
<?php
// Bad
$db = new PDO(/* ... */);
function getUsers(): array {
global $db;
return $db->query('SELECT * FROM users')->fetchAll();
}
// Good
function getUsers(PDO $db): array {
return $db->query('SELECT * FROM users')->fetchAll();
}ตัวแปร static
ตัวแปร static จะคงค่าไว้ระหว่างการเรียกฟังก์ชันแต่ละครั้ง แต่ยังคงเป็นตัวแปรเฉพาะที่ของฟังก์ชันนั้น:
<?php
function callCount(): int {
static $count = 0;
return ++$count;
}
echo callCount(); // 1
echo callCount(); // 2
echo callCount(); // 3คลอเชอร์และการจับตัวแปร
คลอเชอร์ (ฟังก์ชันไม่ระบุชื่อ) สามารถจับตัวแปรจากขอบเขตภายนอกด้วย use ได้:
<?php
$prefix = 'Mr';
$greet = function(string $name) use ($prefix): string {
return "$prefix. $name";
};
echo $greet('Smith'); // Mr. Smithการจับตัวแปรด้วยการอ้างอิง
จับตัวแปรด้วยการอ้างอิงโดยใช้ use (&$var) เพื่อให้คลอเชอร์แก้ไขตัวแปรภายนอกได้:
<?php
$total = 0;
$add = function(int $n) use (&$total): void {
$total += $n;
};
$add(10);
$add(5);
echo $total; // 15ฟังก์ชันลูกศร
ฟังก์ชันลูกศรของ PHP 7.4 (fn =>) จะจับขอบเขตภายนอกโดยอัตโนมัติด้วยค่า — ไม่จำเป็นต้องใช้ use:
<?php
$multiplier = 3;
$nums = [1, 2, 3, 4];
$result = array_map(fn($n) => $n * $multiplier, $nums);
print_r($result); // [3, 6, 9, 12]ฟังก์ชันซ้อนกัน
PHP อนุญาตให้กำหนดฟังก์ชันหนึ่งไว้ภายในอีกฟังก์ชันหนึ่งได้ แต่ฟังก์ชันด้านในจะเข้าถึงได้จากส่วนกลางหลังจากมีการเรียกฟังก์ชันด้านนอก:
<?php
function outer(): void {
function inner(): void {
echo 'inner called';
}
}
// inner(); // Fatal: undefined before outer() is called
outer();
inner(); // works nowตรวจสอบความเข้าใจ
ตัวแปร static ภายในฟังก์ชัน PHP ทำหน้าที่อะไร
ทบทวน: ขอบเขตตัวแปร
กฎสำคัญเกี่ยวกับขอบเขตใน PHP:
- ฟังก์ชันมีขอบเขตเฉพาะที่ของตนเอง
- ต้องนำเข้าตัวแปรส่วนกลางด้วย
global - ใช้
$GLOBALS['name']เป็นทางเลือกได้ - ตัวแปร
staticจะคงอยู่ระหว่างการเรียกฟังก์ชันแต่ละครั้ง - คลอเชอร์จับตัวแปรภายนอกด้วย
use - ฟังก์ชันลูกศรจะจับตัวแปรด้วยค่าโดยอัตโนมัติ
คำถามที่พบบ่อย
บทเรียน “ขอบเขตตัวแปร: ภายในและส่วนกลาง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ขอบเขตตัวแปร: ภายในและส่วนกลาง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ขอบเขตตัวแปร: ภายในและส่วนกลาง”
ทำความเข้าใจว่า PHP แยกขอบเขตของฟังก์ชันอย่างไร และวิธีใช้คีย์เวิร์ด global คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “ขอบเขตตัวแปร: ภายในและส่วนกลาง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม
ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การกำหนดและเรียกใช้ฟังก์ชัน
- พารามิเตอร์ค่าเริ่มต้นและพารามิเตอร์จำนวนไม่แน่นอน
- ขอบเขตตัวแปร: ภายในและส่วนกลาง
- ฟังก์ชันไม่ระบุชื่อและโคลสเชอร์