การประกาศตัวแปรใน 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
- global
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 ยกตัวอย่าง เช่น
|
|
ผลลัพธ์จะออกมาเป็น
My name is Phanupong
ก่อน PHP 8.2 เราสามารถใช้ ${$propertyName} แทน $$propertyName ได้แต่หลังจาก php 8.2 เป็นต้นไปให้เปลี่ยนเป็น {$$propertyName}
ในตัวอย่าง code นี้ถ้าเราเจอ $$ ให้ถอดออกทีละตัว แบบนี้
- $proppertyName มีค่าเท่ากับ “firstname”
- นำแทนที่ใน $propertyName จะได้ $$propertyName = $firstname
- ในบรรทัดที่ 2 จึงมีค่าเท่ากับ $firstname = “Phanupong”
เราสามารถนำไปสร้าง Class แบบ Dynamic ได้ด้วย code บรรทัดนี้
$className = "Customer";
$obj = new $className();