บทที่ 4 เรื่องของตัวแปรและค่าคงที่


         การเขียนโปรแกรมด้วยภาษาทุกภาษาจะมีรูปแบบการประกาศตัวแปรที่แตกต่างกัน PHP ก็เป็นภาษาหนึ่งที่มีลักษณะโดดเด่นกว่าภาษาอื่น คือ การประกาศตัวแปรของ PHP ไม่ต้องประกาศชนิดข้อมูล (Data type) เนื่องจากภาษา PHP จะกำหนดชนิดของข้อมูลตามค่าของข้อมูลที่ได้รับ

4.2 การประกาสตัวแปร


        จากหัวข้อที่ผ่านมาเราได้รุ้จักความหมายของตัวแปรไปแล้ว ว่าเป็นชื่อที่ตั้งขั้นมาเพื่ออ้างอิงถึงข้อมูลต่างๆในหน่วยความจำ
ซึ่งชื่อของตัวแปรนี้ไม่ใช่เราจะตั้งชื่ออะไรก็ได้ แต่จะมีการกำหนดกฎเกรณ์ในการตั้งชื่อตัวแปรดังนี้
      1. ชื่อตัวแปรต้องขั้นต้นด้วยเครื่อง 
      2. หลังเครื่องหมาย จะตามด้วยชื่อตัวแปรโดยที่ตัวแรกของชื่อต้องเป้นตัวอักษร หรือเครื่องหมาย (undescore) เท่านั้น
      3. ตัวถัดมาของชื่อตัวแปรสามารถเป็นตัวอักษร หรือตัวเลข หรือเครื่องหมาย _ (undescore) เพื่อผสมเป็นชื่อได้
     4. ชื่อของตัวแปรมีคุณสมบัติเป็น case - sensitive คือตัวอักษรตัวใหญ่และตัวเล็กถือว่าเป็นคนละตัวกัน 

4.3 ชนิดข้อมูล

      1. ข้อมูลชนิดจำนวนเต็ม 
       2. ข้อมุลชนิดจำนวนทศนิยม
       3. ข้อมูลชนิดสตริง
       4.ข้อมูลชนิดตรรกะ

4.4 ตัวแปรอาร์เรย์ 

  ตัวแปรอาร์เรย์ เป็นกลุ่มของตัวแปรที่คุณประกาศขึ้นมา โดยใช้ชื่อของตัวแปรแต่ละตัวเหมือนกัน ข้อแตกต่างของตัวแปรแต่ละตัว จะใช้ค่า Index ในการอ้างอิง ตัวแปรชนิดนี้มีประโยชน์ในแง่ของการเก็บข้อมูลที่คล้ายๆ กัน เป็นชุดๆ โดยที่คุณไม่ต้องห่วงเรื่องการตั้งชื่อตัวแปรแต่ละตัว เพราะมีชื่อเหมือนกัน ต่างกันที่ค่า Index  จะทำให้การเรียกใช้งานตัวแปรเหล่านี้ง่าย และสะดวกกว่า   ซึ่งตัวแปรที่ประกาศเป็นแบบอาร์เรย์นี้   แต่ละตัวจะเรียกว่า สมาชิกตัวที่….  มีรูปแบบการประกาศดังนี้

Dim intCnt( ) As Integer
     จะเห็นได้ว่า มีความคล้ายกับการประกาศตัวแปรแบบปกติ ที่เพิ่มขึ้นมาก็คือ เครื่องหมายวงเล็บต่อท้ายชื่อตัวแปร ซึ่งหมายถึง คุณต้องการใช้งาน ตัวแปรแบบอาร์เรย์ ซึ่งสมาชิกแต่ละตัวในตัวแปรอาร์เรย์ จะต้องเป็นข้อมูลชนิดเลขจำนวนเต็ม Integer เท่านั้น ตัวแปรอาร์เรย์มี 2 ชนิด คือ
1.ตัวแปรอาร์เรย์แบบสแตติก (Static Arrays)
2.ตัวแปรอาร์เรย์แบบไดนามิก (Dynamic Arrays)
 4.5 ฟังก์ชันที่เกี่ยวข้องกับตัวแปร
ตัวแปรอาร์เรย์แบบสแตติก (Static Arrays)
     เป็นอาร์เรย์ที่มีจำนวนสมาชิกที่แน่นอน ซึ่งคุณต้องระบุจำนวนสมาชิก โดยใช้เลขจำนวนเต็ม เข้าไปในวงเล็บด้วย ขอให้คุณจำลองหน่วยความจำในเครื่องว่า เป็นห้องๆ ติดกัน แต่ละห้องสามารถเก็บข้อมูลได้ 1 ตัวอักษร VB จะจองจำนวนห้องเพื่อเก็บข้อมูล ให้เท่ากับจำนวนตัวแปรอาร์เรย์ที่คุณระบุไว้ เช่น
Dim x(5 ) As Integer   หมายถึง ตัวแปร x เป็นตัวแปรอาร์เรย์ชนิดสแตติก ที่ใช้เก็บเลขจำนวนเต็ม Integer โดยที่มีสมาชิกทั้งสิ้น 5 ตัว การใช้งานตัวแปรแต่ละตัว โดยการใช้ชื่อ x(0) เป็นตัวที่ 1 หรือเรียกอีกอย่างหนึ่งว่า ขอบเขตล่าง ไปจนถึง x(4) เป็นตัวที่ 5 หรือเรียกอีกอย่างหนึ่งว่า ขอบเขตบน ซึ่งจะมีความสำคัญเป็นอย่างยิ่ง ในการใช้งานตัวแปรแบบอาร์เรย์ โดยปกติแล้วสมาชิกตัวแรกของตัวแปรแบบอาร์เรย์ จะมีลำดับที่ 0 เสมอ
Dim x(1 To 10 ) As Long  หมายถึง ประกาศตัวแปรอาร์เรย์ ที่มีสมาชิก 10 ตัว แต่ละตัวแทนข้อมูลชนิด Long โดยที่มีขอบเขตล่างเท่ากับ 1 สมาชิกตัวแรกคือ x(1) ไปจนถึง x(10) โดยที่มีขอบเขตบนเท่ากับ 10 เป็นต้น
     ค่าที่อยู่ในวงเล็บจะเรียกว่า ค่า Index ทำให้ตัวแปร x แต่ละตัวมีความแตกต่างกันนั่นเอง และในการใช้งาน ขอให้คุณใช้ตัวแปรอาร์เรย์ชนิดนี้ ให้น้อยที่สุดเท่าที่จะเป็นไปได้ เนื่องจากว่า เมื่อคุณประกาศตัวแปรอาร์เรย์แบบสแตติกแล้ว VB จะจองหน่วยความจำเท่ากับจำนวนสมาชิกทันที ถึงแม้ว่า คุณจะไม่มีการใช้งานตัวแปรก็ตาม หรือใช้งานตัวแปรไม่ครบทุกตัว คุณจะสูญเสียหน่วยความจำในส่วนนี้ไป เช่น กรณีข้างต้น สมมติว่า คุณใช้งานเพียง 3 ตัวแปร x(0), x(1) และ x(2) คุณต้องเสียหน่วยความจำไป 5 ส่วน ซึ่งไม่มีความจำเป็นแต่อย่างใด ขอให้คุณใช้อาร์เรย์ชนิดไดนามิกจะเหมาะสมกว่า
ตัวแปรอาร์เรย์แบบไดนามิก (Dynamic Arrays)
     เป็นตัวแปรอาร์เรย์ที่ใช้สำหรับกลุ่มของตัวแปร ที่คุณไม่ทราบจำนวนที่แน่นอน หรือคุณทราบแต่ต้องการใช้อาร์เรย์แบบไดนามิก เพื่อประหยัดทรัพยากรระบบ โดยที่ตัวแปรแบบอาร์เรย์ จะปรับขนาดจำนวนสมาชิกให้เท่ากับ จำนวนตัวแปรที่คุณต้องการใช้ในขณะนั้น จะเห็นได้ว่า มีการใช้ทรัพยากรระบบ เมื่อต้องการเท่านั้น ซึ่งเป็นข้อดีเป็นอย่างยิ่ง มีรูปแบบการประกาศดังนี้
Dim intCnt( ) As Integer
     ข้อแตกต่างของตัวแปรอาร์เรย์แบบไดนามิก คือ คุณไม่ต้องระบุจำนวนสมาชิกในวงเล็บ จะเห็นได้ว่ามีความยีดหยุ่นมากกว่า ตัวแปรอาร์เรย์แบบสแตติก แต่ถ้าในขณะรัน คุณต้องการกำหนดจำนวนสมาชิกที่แน่นอน คุณต้องใช้คำสั่งดังนี้
ReDim [Preserve] varname(subscripts) As type
คำสั่ง ReDim หมายถึง คุณต้องการกำหนดจำนวนสมาชิกในตัวแปรอาร์เรย์ใหม่
คำสั่ง Preserve หมายถึง คุณต้องการเก็บข้อมูลเดิม ที่ตัวแปรอาร์เรย์ดังกล่าวเก็บไว้
ตัวแปร varname หมายถึง ตัวแปรอาร์เรย์ที่คุณต้องการกำหนดจำนวนสมาชิก
ตัวแปร subscripts หมายถึง ขนาดจำนวนสมาชิกที่คุณต้องการ จะต้องเป็นเลขจำนวนเต็ม
ตัวแปร type หมายถึง ชนิดของข้อมูลที่คุณต้องการให้ตัวแปรอาร์เรย์ทดแทน เช่น
สมมติว่าคุณประกาศตัวแปรอาร์เรย์  Dim intCnt( ) As Integer ต่อมาคุณต้องการระบุขนาดจำนวนสมาชิกของตัวแปรดังกล่าว ให้คุณทำดังนี้
ReDim intCnt(10 ) As Integer
แต่ถ้าคุณต้องการรักษาค่า ที่ตัวแปรอาร์เรย์ intCnt ( ) เก็บไว้ด้วย คุณต้องเพิ่มเติมดังนี้
ReDim Preserve intCnt(10 ) As Integer
     จากกรณีที่กล่าวมา เป็นการสร้างตัวแปรอาร์เรย์แบบ 1 มิติ คุณสามารถเพิ่มเติมให้ตัวแปรอาร์เรย์มีประสิทธิภาพมากยิ่งขึ้น ด้วยการใช้ ตัวแปรอาร์เรย์แบบหลายมิติ

 4.5 ฟังก์ชันที่เกี่ยวข้องกับตัวแปร


       ก่อนผ่านตัวแปร และ operator ควรทำความรู้จักกับฟังก์ชันตัวแปร ซึ่งสามารถนำมาใช้และควบคุมตัวแปรในวิธีการต่าง ๆ
ทดสอบและตั้งค่าประเภทตัวแปร
ฟังก์ชันเหล่านี้ส่วนมากใช้ทดสอบประเภทข้อมูล โดยฟังก์ชันใช้มากมี 2 ฟังก์ชัน คือ gettype() และ settype()
Int settype (string var, string type);
การใช้ settype() ให้ส่งผ่านตัวแปรที่ต้องการเปลี่ยนประเภท และ string เก็บประเภทใหม่สำหรับตัวแปรที่ส่งเข้าไป
$a = 56;
echo gettype ($a). “
”;
settype ($a, “double”);
echo gettype ($a). “
”;
is_array() 
is_double(), is_float(), is_real() ( ทั้งหมดเป็นฟังก์ชันเดียวกัน ) 
is_long(), is_int(), is_integer() ( ทั้งหมดเป็นฟังก์ชันเดียวกัน ) 
is_string() 
is_object()
PHP มีฟังก์ชันทดสอบสถานะของตัวแปรหลายฟังก์ชัน 
isset () ใช้ชื่อตัวแปรเป็น อากิวเมนต์ และ ส่งออก true ถ้าตัวแปรมีอยู่ กรณีอื่นเป็น false 
Int isset (mixed var);
Int unset (mixed var);
Int empty (mixed var);
echo isset($tireqty);
echo isset($nothere);
echo empty($tireqty); 
echo empty($nothere);
ตัวแปร $nothere ไม่มีอยู่จริง ดังนั้น จะส่งออกค่า false จาก isset() และให้ผลลัพธ์ true จาก empty() ฟังก์ชันเหล่านี้สามารถใช้สร้างความมั่นใจว่ามีการป้อนค่าให้กับฟิลด์ในฟอร์ม
การแปลงประเภทตัวแปร สามารถใช้ 3 ฟังก์ชัน
double doubleval (mixed var); 
string strval (mixed var);

String gettype (mixed, var);
การใช้ gettype() ให้ส่งผ่านตัวแปร เพื่อค้นหาประเภทข้อมูลและส่งออกข้อความชื่อประเภท หรือ “unknow type” ถ้าไม่ใช่ประเภทข้อมูลมาตรฐาน คือ integer double string array หรือ object 
ตัวอย่างคำสั่ง 
เมื่อ เรียก gettype () ครั้งแรก ประเภทข้อมูลของ $a คือ integer หลังจาก เรียก settype() ประเภทข้อมูลได้เปลี่ยนเป็น double
PHP มีฟังก์ชันเฉพาะ จำนวนหนึ่ง แต่ฟังก์ชันนำตัวแปรในฐานะ อากิวเมนต์ และส่งออก true หรือ false ฟังก์ชันเหล่านี้ ได้แก่ 
ทดสอบสถานะตัวแปร 
unset () ใช้กำจัดตัวแปร และส่งค่าออกเป็น true 
empty() ใช้ตรวจสอบว่าตัวแปรมีอยู่ และ เป็นค่าว่าง หรือ เป็นศูนย์ ส่งออกค่าเป็น true หรือ false ตามกรณี 
ตัวอย่างการใช้ ฟังก์ชัน และ เขียนคำสั่งลงในสคริปต์ 
ตัวแปร $tireqty จะส่งออกค่า true จาก isset() ไม่ว่ามีได้รับค่าจากฟิลด์ของฟอร์มหรือไม่ ส่วน empty() ขึ้นกับการรับค่า 
การแปลงตัวแปร 
int intval (mixed var);