ข้ามไปยังเนื้อหาหลัก
คู่มือระบบ เนื้อหาผ่านการตรวจสอบแล้ว

ฟังก์ชัน: 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 รับพัฒนาและออกแบบ Enterprise Web Application, API Integration และระบบบริหารงานภาครัฐ/เอกชน พร้อมการสนับสนุนระยะยาว

ดูบริการรับพัฒนาซอฟต์แวร์