본문으로 건너뛰기

เนื้อหาภาษาไทย / 태국어 콘텐츠

시스템 가이드 검수 완료된 콘텐츠

ฟังก์ชัน: Variable Scope (Global vs. Local)

บทนี้อธิบายเรื่อง Variable Scope ใน PHP โดยเน้นความแตกต่างระหว่าง Global และ Local Scope ซึ่งตัวแปร Global สามารถเข้าถึงได้จากทุกส่วนของสคริปต์ (ยกเว้นในฟังก์ชั...

ฟังก์ชัน: Variable Scope (Global vs. Local)

ในบทเรียนนี้ เราจะมาทำความเข้าใจเรื่องของ Variable Scope หรือ ขอบเขตของตัวแปร ใน PHP ซึ่งเป็นสิ่งสำคัญอย่างยิ่งในการเขียนโปรแกรมที่มีประสิทธิภาพและหลีกเลี่ยงข้อผิดพลาดที่ไม่คาดฝัน Scope กำหนดว่าตัวแปรใดสามารถเข้าถึงได้จากส่วนใดของโค้ด

ความแตกต่างระหว่าง Global และ Local Scope

ใน PHP ตัวแปรสามารถมีขอบเขตได้สองแบบหลักๆ คือ:

  • Global Scope: ตัวแปรที่ประกาศไว้นอกฟังก์ชัน จะมีขอบเขตเป็น Global นั่นคือสามารถเข้าถึงได้จากทุกส่วนของสคริปต์ ยกเว้นภายในฟังก์ชันโดยตรง (เว้นแต่จะมีการระบุเป็นพิเศษ)
  • Local Scope: ตัวแปรที่ประกาศไว้ภายในฟังก์ชัน จะมีขอบเขตเป็น Local นั่นคือสามารถเข้าถึงได้เฉพาะภายในฟังก์ชันนั้นๆ เท่านั้น

ลองดูตัวอย่างเพื่อให้เห็นภาพชัดเจนยิ่งขึ้น:

<?php

$global_variable = "Hello, Global World!"; // ตัวแปร Global

function myFunction() {
  $local_variable = "Hello, Local World!"; // ตัวแปร Local
  echo "ภายในฟังก์ชัน: " . $local_variable . "<br>";
  echo "ภายในฟังก์ชัน (พยายามเข้าถึง Global): " . $global_variable . "<br>"; // จะไม่แสดงผลค่าของ $global_variable
}

myFunction();

echo "ภายนอกฟังก์ชัน: " . $global_variable . "<br>";
echo "ภายนอกฟังก์ชัน (พยายามเข้าถึง Local): " . $local_variable . "<br>"; // จะเกิด Error: Undefined variable

?>

จากตัวอย่างข้างต้น:

  • $global_variable ถูกประกาศไว้นอกฟังก์ชัน myFunction() ดังนั้นจึงเป็นตัวแปร Global
  • $local_variable ถูกประกาศไว้ภายในฟังก์ชัน myFunction() ดังนั้นจึงเป็นตัวแปร Local
  • เมื่อเราพยายามเข้าถึง $global_variable ภายในฟังก์ชัน myFunction() PHP จะไม่สามารถเข้าถึงได้โดยตรง (จะแสดงผลเป็นค่าว่างหรือเกิด Warning ขึ้นอยู่กับการตั้งค่า PHP)
  • เมื่อเราพยายามเข้าถึง $local_variable ภายนอกฟังก์ชัน myFunction() จะเกิด Error เนื่องจากตัวแปรนั้นมีขอบเขตเฉพาะภายในฟังก์ชัน

การใช้ Keyword 'global' เพื่อเข้าถึงตัวแปร Global ภายในฟังก์ชัน

หากเราต้องการเข้าถึงตัวแปร Global ภายในฟังก์ชัน เราสามารถใช้ keyword global เพื่อบอกให้ PHP ทราบว่าเราต้องการอ้างอิงถึงตัวแปร Global นั้น:

<?php

$global_variable = "Hello, Global World!";

function myFunction() {
  global $global_variable; // ประกาศว่าต้องการใช้ตัวแปร Global ชื่อ $global_variable
  echo "ภายในฟังก์ชัน (เข้าถึง Global ด้วย keyword 'global'): " . $global_variable . "<br>";

  $global_variable = "Global variable has been changed inside function!"; // เปลี่ยนค่าตัวแปร Global
}

myFunction();

echo "ภายนอกฟังก์ชัน (หลังจากเรียกฟังก์ชัน): " . $global_variable . "<br>";

?>

จากตัวอย่างนี้:

  • เราใช้ global $global_variable; ภายในฟังก์ชัน myFunction() เพื่อบอกให้ PHP ทราบว่าเราต้องการใช้ตัวแปร Global ที่ชื่อ $global_variable
  • เมื่อเราเปลี่ยนค่าของ $global_variable ภายในฟังก์ชัน การเปลี่ยนแปลงนั้นจะมีผลต่อตัวแปร Global จริงๆ

ข้อควรระวัง: การใช้ global มากเกินไป อาจทำให้โค้ดอ่านยากและบำรุงรักษายากขึ้น ควรพิจารณาการส่งค่าตัวแปรเป็น Argument ให้กับฟังก์ชันแทน หากเป็นไปได้

การใช้ Keyword 'static' เพื่อเก็บค่าตัวแปร Local ระหว่างการเรียกฟังก์ชัน

โดยปกติแล้ว เมื่อฟังก์ชันทำงานเสร็จสิ้น ตัวแปร Local ทั้งหมดที่สร้างขึ้นภายในฟังก์ชันจะถูกทำลาย แต่หากเราต้องการเก็บค่าของตัวแปร Local ไว้สำหรับการเรียกฟังก์ชันครั้งถัดไป เราสามารถใช้ keyword static:

<?php

function myFunction() {
  static $counter = 0; // ตัวแปร Static Local

  $counter++;

  echo "ฟังก์ชันถูกเรียก " . $counter . " ครั้ง<br>";
}

myFunction(); // ฟังก์ชันถูกเรียก 1 ครั้ง
myFunction(); // ฟังก์ชันถูกเรียก 2 ครั้ง
myFunction(); // ฟังก์ชันถูกเรียก 3 ครั้ง

?>

จากตัวอย่างนี้:

  • $counter ถูกประกาศเป็น static ดังนั้นค่าของมันจะถูกเก็บไว้ระหว่างการเรียกฟังก์ชันแต่ละครั้ง
  • เมื่อฟังก์ชัน myFunction() ถูกเรียก ค่าของ $counter จะเพิ่มขึ้นเรื่อยๆ

ประโยชน์ของ Static Variables:

  • ใช้ในการนับจำนวนครั้งที่ฟังก์ชันถูกเรียก
  • ใช้ในการเก็บค่า state ของฟังก์ชัน
  • ใช้ในการสร้าง Singleton Pattern (ใน OOP)

สรุป

ในบทเรียนนี้ เราได้เรียนรู้เกี่ยวกับ:

  • ความแตกต่างระหว่าง Global และ Local Scope
  • การใช้ keyword global เพื่อเข้าถึงตัวแปร Global ภายในฟังก์ชัน
  • การใช้ keyword static เพื่อเก็บค่าตัวแปร Local ระหว่างการเรียกฟังก์ชัน

การทำความเข้าใจเรื่อง Variable Scope เป็นสิ่งสำคัญในการเขียนโปรแกรม PHP ที่มีประสิทธิภาพและหลีกเลี่ยงข้อผิดพลาด ควรฝึกฝนการใช้งาน Global และ Static Variables อย่างระมัดระวัง เพื่อให้โค้ดมีความชัดเจนและบำรุงรักษาง่าย

Office.in.th Custom Service

이 구조를 바탕으로 시스템을 개발하거나 맞춤 변경하고 싶으신가요?

Office.in.th는 엔터프라이즈 웹 애플리케이션, API 연동, 공공/민간 업무 관리 시스템을 설계·개발하며 장기 지원을 제공합니다.

소프트웨어 개발 서비스 보기