พบกันอีกแล้วหลังจากหายไปซะสัปดาห์กว่าๆ ก็ไม่มีไรหรอกครับ แอบไปแข่งเกมมา ปีนี้ก็สนุกดีครับ แต่เสียดายคนน้อยไปหน่อย

เรามาเข้าเรื่องของเราเลยดีกว่า ตอนนี้ก็เป็นเรื่องของตัวแปร หลายๆ ท่านคงจะทราบแล้วว่าวีธีการประกาศตัวแปรใน PHP นั้น ง่ายแสนง่าย เพียงแต่ใส่เครื่องหมาย $ เข้าไปข้างหน้า ข้อความนั้นก็จะเป็นตัวแปรแล้ว แต่มีข้อแม้อยู่นิดนึงคือ

  1. ห้ามมีช่องว่างในตัวอักษร
  2. ห้ามขึ้นต้นด้วยตัวเลข
  3. ห้ามมีเครื่องหมายพิเศษ (Control Charecter)
  4. ตัวอักษรเล็ก-ใหญ่ ถือว่าเป็นคนละตัวกัน (Case sensitive)

การกำหนดค่าให้ตัวแปร

เราสามารถกำหนดค่าให้ตัวแปรตั้งแต่ตอนที่เราประกาศตัวแปรขึ้นมาได้เลย โดยใช้เครื่องหมาย = ในการกำหนดค่าให้กับตัวแปรนั้นๆ ลองดูตัวอย่างกันครับ

 <?php
	$color = "green";	// ตัวแปร color = string
	$num = 12;	// ตัวแปร num = integer
	$age = "13.5";	// ตัวแปร age = string
	$sum = 12 + "13";	// ผลลัพท์คือ 25 เป็น integer เนื่องจาก 13 ถูก cast เป็น Integer
	$total = $sum + $age;	// ผลลัพท์คือ 38.5 เป็น double เนื่องจาก age ถูก cast เป็น double -> double + integer = double
?> 

ในภาษา PHP นั้น ไม่ค่อยให้ความสำคัญในเรื่อง Datatype เท่าใด หลายๆ คนอาจจะมองว่าเ็ป็นข้อดีของมัน แต่ให้ระวัง ตอนไปเขียนภาษาอื่น โดยเฉพาะ Java ส่วนเรื่องการ casting ของตัวแปรนั้น ค่อยคุยกันในโอกาสต่อไปนะครับ

การใช้ตัวแปรอ้างอิงถึงกัน (Reference)

รูปแบบนี้ ไม่ค่อยได้ใช้กันเท่าไหร่หรอกครับ การทำงานของมันก็คือ เราสร้างตัวแปรขึ้นมาตัวหนึ่ง สมมุติชื่อ $a แล้วใช้ตัวแปรอีกตัว สมมุติชื่อ $b อ้างอิงตำแหน่งหน่วยความจำที่ $a ชี้อยู่ ดังนั้น ถ้าหากเราเปลี่ยนค่าที่ $b ค่าของ $a ก็จะเปลี่ยนไปด้วย เพราะชี้ตำแหน่งหน่วยความจำที่เดียวกัน (คนที่เคยเขียนภาษา C มาก่อนคงจะนึกภาพออกนะครับ) ลองดูตัวอย่างกันเลย

 <?php
	$a = "cmdevhub";
	$b = &$a;	// $b อ้างอิงหน่วยความจำที่ $a ชี้อยู่
	$b = "This is chiangmai dev hub";

	echo $a; // ผลลัพธ์ This is chiangmai dev hub
?>  

วิธีการก็คือ ใส่เครื่องหมาย & (ampersand) ข้างหน้าตัวแปรที่เราต้องการอ้างอิงหน่วยความจำเท่านั้น ก็คล้ายๆ ภาษา C แหละครับ จากการเขียน PHP มานานพอสมควร โอกาสใช้นั้น มีน้อยมากๆ เลย ครับ (แต่รู้ไว้ใช่ว่า จริงไหม)

ขอบเขตของตัวแปร (Variable Scope)

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

  1. Local variable
  2. Function parameter
  3. Global variable
  4. Static variable

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

1.Local variable

เป็นตัวแปรที่ประกาศในฟังก์ชั่น และใช้งานได้แต่ภายในฟังก์ชั่นที่ประกาศไว้เท่านั้น (อันนี้ขอเน้นเลยล่ะครับ โดยเฉพาะ ถ้าเขียนเป็น OO เมื่อไหร่ สนุกสนานกันแน่นอน) ลองดูตัวอย่างกันครับ

 <?php
	$x = 10;
	function showx() {
		$x = 0;
		echo "x is " . $x;
	}
	// เริ่มทำงานตรงนี้
	showx();
	echo "<br />";
	echo "x is " . $x;
?> 

จากตัวอย่าง จะเห็นว่า เราประกาศตัวแปรชื่อเดียวกันคือ $x แต่ตัวหนึ่งอยู่ภายในฟังก์ชั่น showx() ส่วนอีกตัวอยู่ภายนอกฟังก์ชั่น เมื่อเราเรียกใช้ฟังก์ชั่น showx() คำสั่ง echo ในฟังก์ชั่น จะพิมพ์ค่า $x ที่อยู่ในฟังก์ชั่นออกมา แต่ถ้าหากเราทำการลบคำสั่ง $x = 0; ออกไป จะเกิด Notice: Undefined variable: x เนื่องจากตัวแปร $x ไม่ได้ถูกประกาศขึ้นมา และฟังก์ชั่น showx() ก็มองไม่เห็นตัวแปร $x ที่อยู่ข้างนอก ลองดูภาพได้ครับ

จากรูป ผมได้ทำการ comment คำสั่ง $x = 0; ออกไป ทำให้ในฟังก์ชั่น showx() ไม่มีตัวแปร $x อยู่ จึงเกิด error แบบนี้ขึ้น (ขึ้นอยู่กับการปรับระดับ error ในไฟล์ php.ini ด้วยนะครับ)

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

สรุปง่ายๆ ก็คือ Local variable จะมองเห็น และใช้งานได้ภายในฟังก์ชั่นที่ประกาศตัวแปรนั้นๆ ขึ้นมาเท่านั้น แต่ถ้าหากเราใช้คำสั่ง global เมื่อไหร่ ตัวแปรนั้นจะกลายเป็น Global variable ไปทันที ซึ่งจะมองเห็นเป็นตัวแปรตัวเดียวกันทั้งโปรแกรม

2.Function parameter

ง่ายๆ ตรงๆ เลยครับ เป็นตัวแปรที่รับค่าในฟังก์ชั่น ซึ่งก็เหมือนกับ Local variable ที่จะมองเห็น และใช้งานได้ภายในฟังก์ชั่นนั้นๆ เท่านั้น เอาไว้เราค่อยมาต่อกันในเรื่องของฟังก์ชั่นล้วนๆ เลยล่ะกันครับ ตรงนี้ก็ติดไว้แค่นี้ก่อน ลองดูตัวอย่างนะครับ

 <?php
	function sqr($num) {
		$num = $num * $num;
		return $num;
	}
?> 

จากตัวอย่าง เป็นฟังก์ชั่นที่คำนวนเลขยกกำลังสองของค่าที่ส่งเข้ามา และคืนค่ากลับไป ตัวแปรแบบ Function parameter นี้จะถูกสร้างขึ้นตอนที่ฟังก์ชั่นนั้นถูกเรียก และจะถูกทำลายเมื่อฟังก์ชั่นนั้นทำงานเสร็จสิ้น

3.Global Variable

จากตัวอย่างใน Local variable ตัวอย่างสุดท้าย ผมได้ยกตัวอย่างตัวแปรแบบ global ไปแล้ว สรุปง่ายๆ ก็คือ ตัวแปรไหนที่ถูกประกาศเป็น global ตัวแปรนั้นจะสามารถถูกเรียกใช้งานจากที่ไหนก็ได้ในโปรแกรม โดยวิธีการประกาศตัวแปรให้เ็ป็น global ทำได้โดยใช้คำสั่ง GLOBAL ตามด้วยชื่อตัวแปรนั้นๆ ลองดูตัวอย่างอีกสักครั้งครับ

 <?php
	$value = 15;
	function plus() {
		GLOBAL $value;
		$value++;
		echo $value;
	}
	plus();	// ผลลัพธ์ 16
?> 

(จริงๆ แล้วมีอีกวิธีหนึ่ง คือนำตัวแปร $value ไปใส่ในตัวแปรแบบ super global ที่ชื่อ $_GLOBAL แต่วิธีนี้ เดี๋ยวเราค่อยมาคุยกันครับ)

4.Static variable

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

 <?php
	function getNum() {
		STATIC $num = 0;
		$num++;
		echo $num;
		echo "<br />";
	}

	getNum();	// ผลลัพท์ 1
	getNum();	// ผลลัพท์ 2
	getNum();	// ผลลัพท์ 3
?> 

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

ค่าคงที่ (Constant)

เป็นการกำหนดค่าที่ไม่สามารถเปลี่ยนได้ในโปรแกรมแล้ว และค่านั้นจะอยู่ไปจนจบโปรแกรม ใช้งานมากพอสมควร โดยเฉพาะการกำหนดค่าที่เรารู้แน่นอนอยู่แล้ว เช่น PI ค่าคงที่สามารถกำหนดได้โดยใช้คำสั่ง define() ลองดูตัวอย่างกันนะครับ

 <?php
	define("PI", 3.1415926);

	echo "ค่าพายคือ " . PI;	// พิมพ์ 3.1415926 ออกมา
	echo "<br />";
	$cur = 3 * 3 * PI;
	echo "พื้นที่วงกลมรัศมี 3 หน่วย คือ " . $cur; // ผลลัพท์ 28.274328
?> 

ก็จบกันไปอีกอันหนึ่งสำหรับเรื่องของตัวแปร แต่ก็ไม่จบหมดซะทีเดียว เพราะยังเหลือตัวแปรอีก 2 ชนิดคือ super global และ variable variable (ประมาณ $$a = $b; หรือ ${a}; ทำนองนี้) ก็ขอติดไว้ก่อนครับ ขออนุญาติไปเขียนตอนต่อๆ ไปก่อน เดี๋ยวจะไม่จบเอา อย่าลืมติดตามนะครับ

Comments

จำนวนความเห็น