PHP สนับสนุนโครงสร้างข้อมูลแบบ จำนวนเต็ม (Interger) จำนวนทศนิยม (Floating Point) Arrays สายอักษร (String) และ วัตถุ (Objects) อย่างไรก็ตาม การจะระบุว่าตัวแปรมีโครงสร้างข้อมูลประเภทใดนั้น เป็นแบบ Implicit กล่าวคือไม่มีการประกาศอย่างเป็นทางการ แต่ตัวแปลภาษา PHP จะทำการเดาให้เอง ทั้งนี้เนื้อหาในส่วนนี้จะแสดงถึงโครงสร้างข้อมูลแบบต่างๆ
จำนวนเต็มใน PHP สามารถระบุได้ด้วยเลขฐานสิบ ฐานแปด และฐานสิบหก ในลักษณะเดียวกันกับภาษา C ดังตัวอย่างต่อไปนี้
| <?php $a = 1000; $b = -1024; $c = 0123 // เลขฐานแปดมีค่าเป็น 83 $d = 0x0a // เลขฐานสิบหกมีค่าเป็น 10 ?> |
จำนวนทศนิยมใน PHP จะเป็นแบบ Double Precision ในลักษณะเช่นเดียวกันกับภาษา C ซึ่งสามารถระบุได้ด้วยเลขทศนิยมแบบปกติ หรือ อาจระบุแบบ Scientific เช่น 1.2e3 ซึ่งหมายถึง 1.2*103ดังตัวอย่างต่อไปนี้
| <?php $a = 1.25; // 1.25 $b = -1.25e3; // (-1) * 1.25 * 103 ?> |
สายอักษรหรือ Strings จัดเป็น Arrays ประเภทหนึ่งโดยตัวอักษรตัวแรกจะเริ่มที่ Index 0 ใน PHP นั้นมี 2 วิธีในการกำหนดค่า String ให้กับตัวแปร คือการใช้ Single Quote “'”และ Double Quote “"” และมีวิธีการระบุค่า Escape Sequence เพื่อใช้แสดงค่าตัวอักษรพิเศษบางตัว ดังแสดงได้ในตารางต่อไปนี้
sequence | meaning |
| \n | ขึ้นบรรทัดใหม่ (newline) |
| \r | carriage |
| \t | horizontal tab |
| \\ | เครื่องหมาย “\” backslash |
| \$ | เครื่องหมาย “$”dollar sign |
| \" | เครื่องหมาย “"”double-quote |
| \[0-7]{1,3} | ตัวอักษรระบุดัวยเลขฐานแปด |
| \x[0-9A-Fa-f]{1,2} | ตัวอักษรระบุดัวยเลขฐานสิบหก |
กรณีอ้างอิงด้วย “"” นั้น เมื่อต้องการจะพิมพ์ เครื่องหมาย “"” ให้พิมพ์ด้วย \" เป็นต้น ส่วนกรณีต้องการจะพิมพ์ “'” ก็สามารถพิมพ์ได้ตามปกติ ในกรณีอ้างอิงด้วย “'” ไม่จำเป็นจะต้อง Escape เครื่องหมาย Double-Quote แต่จะเปลี่ยนไป Esacpe “'” ด้วย \' แทน ทั้งนี้เพื่ออำนวยความสะดวก ดังตัวอย่างต่อไปนี้
| <?php $str="It is good to use PHP."; echo $str[1]; // แสดงค่า t echo "It's the php.\n"; echo 'He\'ll says "You are the best".'; ?> |
นอกจากนี้ PHP ยังสนับสนุนการทำงานแบบ Here Document เช่นเดียวกับ Perl และ Unix-Shell อีกด้วย ดังจะแสดงได้ในตัวอย่างต่อไปนี้
| <?php $a=10; $str= <<<EOF Hello, World; This is the sample Here Document. $a is $a; EOF; // or echo <<<END Hi!!! This is sample Of Here Document. END; ?> |
ฟังก์ชันที่เกี่ยวข้องกับสายอักษรนั้น สามารถดูในจาก String Function Reference ของ PHP Manual ดังตัวแย่างแสดงการใช้ strlen ซึ่งเป็นฟังก์ชันในการหาความยาวของ String และ การกระทำกับ String แบบต่างๆ
| <?php $a= "I'm"; $name = "teacher."; echo "<p>".$a." ".$name."</p>\n"; echo "<br>$a $name<br>\n"; $c= "$a $name"; echo strlen($c); ?> |
ข้อควรระวัง : ในการต่อสายอักษรเข้าด้วยกันนั้น PHP จะใช้จุด “.” เป็นตัวปฏิบัติการ ซึ่งแตกต่างจาก Java ที่จะใช้เครื่องหมาย + (รายละเอียดเพิ่มเติมดูในหัวข้อตัวปฏิบัติการตัวอักษร)
ภาษา PHP นั้น Arrays จะทำหน้าที่เหมือนเป็น Number Indexed Array และ Hash Table ในเวลาเดียวกัน กล่าวคือ Index ของ Arrays ในภาษา PHP จะเป็นได้ทั้งจำนวนเต็ม และ ตัวอักษร ซึ่งการสร้าง Array อาจทำได้โดยอาศัย Function List หรือ Array หรือ ผู้เขียนอาจจะเขียนข้อมูลลงไปใน Array โดยตรงเลยก็ได้ ดังตัวอย่างต่อไปนี้
| <?php $Arr = Array("first" => "1" , "second" => "2" , "third" => "3"); echo $Arr[first]." ".$Arr[second]." ".$Arr[third]; // แสดงค่า 1 2 3 // Or $Marr[first] = "1"; $Marr[second] = "2"; $Marr[third] = "3"; echo $Marr[first]." ".$Marr[second]." ".$Marr[third]; // แสดงค่า 1 2 3 ?> |
นอกจากนี้ผู้เขียนโปรแกรมอาจจะเพิ่มข้อมูลเข้าสู่ Array เข้าไปได้เรื่อยๆ โดยไม่จำเป็นต้องระบุตำแหน่ง Index ก็ได้ ซึ่งข้อมูลที่เพิ่มเข้าไปใหม่จะถูกนำไปต่อท้ายโดยอัตโนมัติ
| <?php $A[] = "Zero"; // Add to $A[0] $A[] = "One"; // Add to $A[1] $A[] = "Two"; // Add to $A[2] $A[] = "Three"; // Add to $A[3] echo $A[2]; // แสดง Two ?> |
PHP ยังอำนวยความสะดวกให้ผู้ใช้งานสามารถจัดเรียงข้อมูลใน Array ได้ด้วยฟังก์ชันอื่นๆ เช่น asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort() และ uksort() ทั้งนี้ขึ้นอยู่กับลักษณะการ Sort ข้อมูลและ Key ในการ Sort
ฟังก์ชันที่เกี่ยวข้องกับ Array นั้น สามารถดูในจาก Array Function Reference ของ PHP Manual ดังตัวอย่างแสดงการใช้ Function list และ each เพื่อดึง Key และ ข้อมูลออกจาก Array $HTTP_GET_VARS
| <?php while (list ($key, $val) = each ($HTTP_GET_VARS)) { echo "$key => $val<br>\n"; } ?> |
ข้อควรระวัง : ใน PHP3 จะไม่รองรับการอ้างอิง Array หลายมิติใน String เช่น "Name : $Arr[1][name]" อาจจะได้ผลที่ผิดพลาดได้ สำหรับ PHP4 นั้นสามารถอ้างอิงได้โดยการใช้วงเล็บก้ามปูระบุ เช่น "Name : {$Arr[1][name]}" ด้วยเหตนี้ วิธีการที่ดีที่สุดคือการใช้ String Concatinate เช่น "Name :".$Arr[1][name]; ทั้งนื้อเพื่อให้ใช้ได้กับ PHP ทุก Version ดังแสดงในตัวอย่าง
| <?php $Arr[0][name] = "user1"; $Arr[0][password] = "pwd1"; $Arr[1][name] = "user2"; $Arr[1][password] = "pwd3"; echo "Total :".count($Arr)."User(s)"; $i=0; echo "Name : $Arr[$i][name]\n"; //แสดง Name : Array[name] echo "Name : {$Arr[$i][name]}\n"; //PHP4 จะ แสดง Name : user1 echo "Name : ".$Arr[$i][name]."\n"; //แสดง Name : user1 ?> |
ในการใช้งาน Class และ Object นั้นผู้ใช้ควรมีควมเข้าใจในหลักการของ Object Oriented Programming ก่อนพอสมควร
การพัฒนาโปรแกรมแบบ Object ผู้เขียนโปรแกรมจะต้องเขียนโครงสร้างและ Fuction ต่างของ Object ก่อนจากนั้น จึงทำการสร้างตัวแปรให้เป็นข้อมูลประเภทของ Object นั้นๆ ดังตัวอย่างต่อไปนี้
| <?php class myclass { function do_job() { echo "I will do my job;"; } } $a = new myclass; $b = new myclass; $a->do_job(); $b->do_job(); ?> |
ทั้งนี้รายละเอียดเพิ่มเติมให้อ่านในส่วนของ Class และ Object ของคู่มิอนี้
ในภาษา PHP นั้น ประเภทของข้อมูลที่เก็บในตัวแปรจะถูกเปลี่ยนให้โดยอัตโนมัติ กล่าวคือผู้ใช้ไม่จำเป็นจะต้องกำหนด หรือ ประกาศตัวแปรใดๆ ทั้งสิ้น (ในทำนองเดียวกับ Perl) โดยการตีความประเภทของข้อมูลนั้น จะถูกตีความโดยองค์ประกอบรอบข้าง (Context) เช่น กรณีมีข้อมูลตัวใดในการบวกเป็นจำนวนเต็มทั้งคู่ ผลลัพธ์ที่ได้ก็จะเป็นจำนวนเต็ม แต่หากมีข้อมูลตัวใดตัวหนึ่งเป็นเลขทศนิยม ระบบก็จะตีความผลลัพธ์เป็นเลข ทศนิยมโดยอัตโนมัติ ดังตัวอย่างต่อไปนี้
| <?php $a="0"; // ข้อมูลที่เก็บจะเป็นสายอักษร $a++; // ข้อมูลจะเป็น Ascii "1" $a+=30 // ข้อมูลจะเป็นจำนวนเต็ม 31 $a= 20.01 + $a // ข้อมูลจะถูกแปลงเป็นทศนิยม $a= 5+"20 box" // ผลลัพธ์ทีได้จะเป็น 25 ?> |
อย่างไรก็ตามในบางกรณี ผู้เขียนโปรแกรมอาจจะต้องการระบุประเภทของข้อมูลลงไปด้วย เพื่อให้การประมวลผลได้ผลลัพธ์ตามต้องการ การแปลงข้อมูลนี้เรียกว่า Type Casting และเภทข้อมูลที่ PHP รองรับสำหรับการ Casting คือ
- (int) , (integer) - เพื่อแปลงข้อมูลเป็นประเภทจำนวนเต็ม
- (real) , (double) , (float) - เพื่อแปลงข้อมูลเป็นเลขทศนิยมทั้งหมด
- (string) - เพี่อแปลงข้อมูลเป็นสายอักษร
- (array) - เพื่อแปลงข้อมูลเป็น Array
- (Object) - เพื่อแปลงข้อมูลเป็น Object
ดังแสดงได้ในตัวอย่างต่อไปนี้
| <?php $x = (int) $str1 + ( int ) $str2; $str = "Boy"; $arr = (array) $str; // กรณีการแปลงข้อมูลเป็น Array ข้อมูลที่ไดจะเป็น index ที่ 0 echo $arr[0]; $obj = (object) $str; // กรณีแปลงข้อมูลเป็น Object ข้อมูลจะอยู่ใน Attribute ชื่อ scalar ?> |
นอกจากนี้ PHP ยังมี Function ที่ช่วยให้เราสามารถตรวจสอบประเภทของข้อมูลที่ใช้กับตัวแปร คือ การใช้ Function gettype() เช่น
| <?php $x=10; echo "Type of \$x is" . gettype($x) . "<br>\n"; ?> |
กรณีต้องการเปลี่ยน Type ให้ลองศึกษา Function settype() เพิ่มเติม