Coding Gun

การประกาศตัวแปรใน PHP

ใน PHP เราจะใช้เครื่องหมาย $ นำหน้าชื่อตัวแปรเสมอ

$txt = "ข้อความ";
$x = 5;
$y = 10.5;

การกำหนดค่าให้กับตัวแปรใน PHP สามารถทำได้เลย โดยที่ไม่จำเป็นต้องกำหนดค่าเนื่องจาก PHP เป็นภาษาที่ Dynamic Type หรือ Loosely Type คือ PHP Complier จะทำการแปลงตัวแปรเป็นชนิดที่เหมาะสมให้เอง

จากตัวอย่างเราจะกำหนดค่า คำว่า “ข้อความ” ให้กับตัวแปร $txt ดังนั้นตัวแปร $txt จะมี Data Type เป็น String(ข้อความ) ทันที

ส่วน $x ถูกกำหนดค่าเป็น 5 ดังนั้น Data Type จึงเป็น int(จำนวนเต็ม) และเช่นเดียวกันเมื่อ $y ถูกกำหนดค่าเป็น 10.5 ซึ่งเป็นเลขทศนิยม Data Type ของ $y จึงกลายเป็น float(เลขทศนิยม)

Scope ของตัวแปร

ตัวแปรในทุกๆ ภาษาจะเหมือนกันคือจะมีอายุการใช้งาน เนื่องจากตัวแปรแต่ละตัวจะจองพื้นที่ในหน่วยความจำ ของ Server ดังนั้นเพื่อให้โปรแกรมมีประสิทธิภาพสูงสุด ตัวแปรแต่ละตัวจะมีอายุการใช้งาน การกำหนดอายุการใช้งานเรียกว่า Scope

การเขียนโปรแกรมที่ดีเราต้องมีการกำหนด Scope ของตัวแปรอย่างเหมาะสม โดยใน PHP จะมี Scope ของตัวแปรอยู่ 2 อันดับ ดังนี้

Local Scope

ตัวแปรที่ปรกาศวอยู่ภายใน function จะเป็น Local Variable จะเรียกใช้งานได้ภายใน function ที่ประกาศเท่านั้น พอหมด function ตัวแปรแบบ Local นี้จะหายไปทันที

function myTest() {
    $x = 5; // Local scope

	// สามารถเรียกใช้ $x ได้ใน function นี้เท่านั้น
    echo "Variable x inside function is: {$x}";
} 
myTest();

// การเรียกใช้ ตัวแปร $x ภายนอก Scope ของตัวแปร $x ทำให้เกิด error
echo "Variable x outside function is: {$x}";

Global Scope

ตัวแปรที่ประกาศอยู่ภายนอก function จะเป็น Global Scope จะถูกเข้าถึงได้เฉพาะภายนอก function เท่านั้น

Code ในตัวอย่างนี้ $x จะเป็น Global Scope จะไม่สามารถเรียกได้จากฟังก์ชั่น myTest() จึงทำให้เกิด Error เกิดขึ้น

ส่วนการ echo ในบรรทัดสุดท้ายเป็นการเข้าถึงตัวแปร $x จากภายนอก function จึงไม่เกิด Error ใดๆ

$x = 5; // Global scope

function myTest() {
    // การเข้าถึงตัวแปร $x ที่เป็น Global Scope จึงทำให้เกิด error
    echo "Variable x inside function is: {$x}";
} 
myTest();

echo "Variable x outside function is: {$x}";

การจะเข้าถึงตัวแปรที่เป็น Global Scope นั้นทำได้ 2 วิธีคือ การเข้าถึงโดยใช้ global keyword

$x = 5;
$y = 10;

function myTest() {
    global $x, $y;
    $y = $x + $y;
}

myTest();
echo $y; // outputs 15

จากตัวอย่างเราจะนำเอาค่าว่า global ไปวางไว้หน้าตัวแปร เพื่อจะบอก PHP ว่าเรากำลังจะเข้าถึงตัวแปร $x และ $y ที่เป็น Global Scope ไม่ใช่ Local Scope

อีกวิธีจะเป็นการเข้าถึงได้จากตัวแปร $GLOBALS[index] ซึ่งตัว index จะเป็นชื่อตัวแปรที่เป็น Global Scope

$x = 5;
$y = 10;

function myTest() {
    $GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'];
} 

myTest();
echo $y; // outputs 15

ผลลัพธ์ที่ได้จะเหมือนกับตัวอย่างที่แล้วแต่จะเป็นการเข้าถึงตัวแปร $x โดยผ่านทาง $GLOBALS[‘x’] และ $y ผ่านทาง $GLOBALS[‘y’]

Static

การประกาศตัวแปรแบบ Static คือโดยทั่วไปการทำงานเมื่อจบฟังก์ชั่น ตัวแปรนั้นจะหายไป แต่ในบางกรณีเราอยากให้ตัวแปรที่เป็น Local นั้นอยู่ต่อไป

function myTest() {
    static $x = 0;
    echo $x;
    $x++;
}

myTest();
myTest();
myTest();

จากตัวอย่าง ผลลัพธ์จะเป็น 0, 1, 2 ไล่ไปเรื่อยๆขึ้นอยู่กับเรียก myTest() กี่ครั้ง เพราะแต่ละรอบของการทำงานตัวแปร $x จะยังคงมีชีวิตอยู่เพื่อรอการเรียกใช้งานครั้งถัดไป

Dynamic Variable

Dynamic Vairable คือการนำค่าจากตัวแปรตัวที่ 1 มาเป็นชื่อของตัวแปรตัวที่ 2 ยกตัวอย่าง เช่น

1
2
3
4
$propertyName = "firstname";
$$propertyName = "Phanupong";

echo "My name is" . $$propertyName;

ผลลัพธ์จะออกมาเป็น

My name is Phanupong

ก่อน PHP 8.2 เราสามารถใช้ ${$propertyName} แทน $$propertyName ได้แต่หลังจาก php 8.2 เป็นต้นไปให้เปลี่ยนเป็น {$$propertyName}

ในตัวอย่าง code นี้ถ้าเราเจอ $$ ให้ถอดออกทีละตัว แบบนี้

เราสามารถนำไปสร้าง Class แบบ Dynamic ได้ด้วย code บรรทัดนี้

$className = "Customer";
$obj = new $className();

อ่านบทความอื่นๆต่อได้ที่

Phanupong Permpimol
Follow me

Software Engineer ที่เชื่อในเรื่องของ Process เพราะเมื่อ Process ดี Product ก็จะดีตาม ปัจจุบันเป็นอาจารย์และที่ปรึกษาด้านการออกแบบและพัฒนา Software และ Web Security