0Pricing
PHP Academy · บทเรียน

ขอบเขตตัวแปร: ภายในและส่วนกลาง

ทำความเข้าใจว่า 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การกำหนดและเรียกใช้ฟังก์ชัน
  2. พารามิเตอร์ค่าเริ่มต้นและพารามิเตอร์จำนวนไม่แน่นอน
  3. ขอบเขตตัวแปร: ภายในและส่วนกลาง
  4. ฟังก์ชันไม่ระบุชื่อและโคลสเชอร์
← กลับไปที่ PHP Academy