|
บทที่ 3 ตัวแปร(Variables) |
|
|
|
|
เขียนโดย สุริยา แก้วมุงเมือง
|
|
04 มิ.ย. 2008 23:41น. |
|
เรื่องตัวแปรในภาษา php ถือว่าน่าสนใจมาก เนื่องจากว่ามีความยืดหยุ่นสูง มันยืดหยุ่นยังไงบ้างครับ ก็ยืดหยุ่นตรงที่ว่า เป็น integer อยู่ดีๆ จะเปลี่ยนให้มันเป็น object หรือ string ก็ยังได้ เปลี่ยนเป็นอะไรก็ได้ครับ ใช้ตัวแปรตัวเดิม แต่ผมว่านะ ในทางปฎิบัติ เราจะมาเปลี่ยนไปเปลี่ยนมาให้วุ่นวายทำไม ก็เขียนโปรแกรมให้มันชัดเจนไปเลยครับ ว่าตัวแปรตัวไหนทำหน้าที่อะไร จะได้ไม่สับสนยังไงล่ะครับ ตัวแปรของภาษา php จะขึ้นต้นด้วยเครื่องหมาย $(dollar sign) เสมอนะครับ ยกเว้นค่าคงที่ สำหรับชนิดของตัวแปรนั้นมีมากมายครับ จะขอยกตัวอย่างให้ดูทีละอย่างดีกว่านะครับ 1.ลูลีน(boolean) เป็นตัวแปรที่เก็บค่าได้เพียงแค่สองค่าคือ True กับ False ตัวอย่างนะครับ
<?php $flag = True;// หรือ $flag = False; ?>
2.เลขจำนวนเต็ม(integer) ใช้สำหรับเก็บค่าที่เป็นเลขจำนวนเต็ม ตัวอย่าง
<?php $a = 1234; // เลขฐานสิบ(decimal number) $a = -123; // เลขค่าติดลบ(a negative number) $a = 0123; // เลขฐานแปด จะมีค่าเท่ากับ 83 ในเลขฐานสิบ(octal number,equivalent to 83 decimal) $a = 0x1A; // เลขฐานสิบหก จะมีค่าเท่ากับ 26 ในเลขฐานสิบ(hexadecimal number equivalent to 26 decimal) ?>
3.เลขทศนิยม(double) ใช้สำหรับเก็บค่าที่เป็นตัวเลขที่มีจุดทศนิยม ตัวอย่าง
<?php $a = 1.234; $b = 1.2e3; $c = 7E-10; ?>
4.สายอักขระ(string) ใช้สำหรับเก็บค่าที่เป็นสายอักขระ หรือตัวอักษร สำหรับสตริงนี้มีอักขระอื่นๆมาเกี่ยวข้องอีกจำนวนหนึ่ง ตัวอย่าง ตัวอย่างที่ 1
<?php $foo = 1 + "10.5"; // $foo is float (11.5) $foo = 1 + "-1.3e3"; // $foo is float (-1299) $foo = 1 + "bob-1.3e3"; // $foo is integer (1) $foo = 1 + "bob3"; // $foo is integer (1) $foo = 1 + "10 Small Pigs"; // $foo is integer (11) $foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2) $foo = "10.0 pigs " + 1; // $foo is float (11) $foo = "10.0 pigs " + 1.0; // $foo is float (11) ?>
ตัวอย่างที่ 2
<?php echo 'this is a simple string';
echo 'You can also have embedded newlines in strings this way as it is okay to do';
// Outputs: Arnold once said: "I'll be back" echo 'Arnold once said: "I\'ll be back"';
// Outputs: You deleted C:\*.*? echo 'You deleted C:\\*.*?';
// Outputs: You deleted C:\*.*? echo 'You deleted C:\*.*?';
// Outputs: This will not expand:
a newline echo 'This will not expand:
a newline';
// Outputs: Variables do not $expand $either echo 'Variables do not $expand $either'; ?>
ในตัวอย่างที่ 2 สิ่งที่ตามหลัง คำสั่ง echo มา ก็คือ string นั่นเอง จะเห็นว่ามีอักขระอื่นๆเข้ามาเกี่ยวข้องอีก ถ้า string ถูกใส่ไว้ใน double-quoted ภาษา php จะไม่เข้าใจว่ามีการหลีกเลี่ยงสำหรับตัวอักขระพิเศษปนอยู่ด้วย สามารถอธิบายได้ดังต่อไปนี้ ตัวอักษรที่ถูกหลีกเลี่ยง(Escaped characters-ไม่นำมาแสดงผล แต่มีผลกับการแสดงผล) sequence meaning linefeed (LF or 0x0A (10) in ASCII) carriage return (CR or 0x0D (13) in ASCII) \t horizontal tab (HT or 0x09 (9) in ASCII) \v vertical tab (VT or 0x0B (11) in ASCII) (since PHP 5.2.5) \f form feed (FF or 0x0C (12) in ASCII) (since PHP 5.2.5) \\ backslash \$ dollar sign \" double-quote \[0-7]{1,3} the sequence of characters matching the regular expression is a character in octal notation \x[0-9A-Fa-f]{1,2} the sequence of characters matching the regular expression is a character in hexadecimal notation
ตัวอย่างที่ 3 รูปแบบนี้เรียนกว่าไวยากรณ์แบบ Heredoc
<?php $name = 'MyName'; $str = <<<EOD Example of string spanning multiple lines using heredoc syntax. My name is "$name". EOD; ?>
จากตัวอย่างที่สาม ก็เป็นอีกรูปแบบหนึ่งให้เราเลือกใช้สำหรับกรณีที่ต้องการพิมพ์ข้อความทีเดียวยาวๆ สามารถพิมพ์ออกมาเป็น html ก็ได้ แต่กรณีก็ใช้กันน้อย เพราะไม่มีความจำเป็น แต่ก็ยังมีให้เห็นการใช้อยู่เรื่อยๆ
5.วัตถุ(object) กรณีนี้เป็นเรื่องที่เกี่ยวเนื่องกับเรื่องคลาส วัตถุ ก็เป็นผลผลิต(instance)ที่ได้จากการสร้างคลาสนั้นเอง อาจจะใส่วัตถุดิบ(parameter) เข้าไปในตัวคลาสที่เราสร้างไว้แล้ว ก็จะได้ผลลัพธ์ออกมาเป็นวัตถุ(object)ที่มีหน้าตาเหมือนๆกับบล็อก(class) ที่เราใส่เข้าไป ตัวอย่างนะครับ
<?php class foo { function do_foo() { echo "Doing foo."; } }
$bar = new foo; $bar->do_foo(); ?>
กรณีที่เราต้องแปลงตัวแปรอื่นๆให้เป็น Object
<?php $obj = (object) 'ciao'; echo $obj->scalar; // outputs 'ciao' ?>
6.NUll ค่า NULL นี้ใช้แสดงว่า ตัวแปรที่เรากำหนดค่าให้มันนั้น ไม่มีค่า ตัวแปรต่างๆจะมีค่าเป็น NULL ก็ต่อเมื่อ -มันถูกกำหนดให้เป็น NULL ตรงๆเลย -เรายังไม่ได้ให้ค่าใดๆทั้งสิ้นแก่ตัวแปรเลย อยู่ๆเอาไปใช้ก็เป็น NULL -เมื่อเราใช้ฟังก์ชั่น unset() กับตัวแปรใดๆ ตัวแปรดังกล่าวก็จะมีค่าเป็น NULL อย่างเช่น
$name="myname";unset($name);
ตัวแปร $name ถึงแม้เราจะกำหนดค่าไปแล้ว สุดท้ายก็มี unset() มันซะ ค่าก็เลยกลายเป็น
NULL
ครับ 7.ตัวแปรชนิดทรัพยากร(resource) เป็นตัวแปรชนิดพิเศษอย่างหนึ่ง ใช้สำหรับเก็บค่าที่ใช้อ้างอิงไปยังทรัพยากรภายนอกของ php ตัวแปรชนิดนี้จะถูกสร้างโดยใช้ฟังก์ชั่นชนิดพิเศษๆ ก็คือฟังก์ชั่นที่ติดมากับปลั๊กอินเสริม ที่มาต่อพ่วงเข้ากับ php อย่างเช่น mysql, pgsql, curl, ... ที่เราเห็นกันชัดๆ ก็คือพวกฐานข้อมูลต่างๆ
8.อาเรย์(Array) ตัวแปรอาเรย์นี้ ถ้าพูดกันถึง basic ของตัวแปรจริงๆแล้วมันก็คือ ชุดของตัวแปรนั่นเอง จะใช้ก็ต่อเมื่อกรณีที่มีข้อมูลโครงสร้างเดียวกัน หรือประเภทเดียวกัน หรือทำหน้าที่ในเรื่องๆเดียวกัน หรือมีแหล่งที่มาที่เดียวกัน แต่มีหน้าตาของข้อมูลต่างกัน อาจจะมีข้อมูลอยู่หลายๆชุด ปกติแล้วถ้าเป็นภาษาซี(c language)หรือจาว่า(java language) หรือหลายๆภาษาที่ต้องใช้ compiler จะถูกกำหนดตายตัวไปเลยครับว่า เป็นชุดตัวแปรชนิดอะไร ยกตัวอย่างเช่น array of integer ก็จะเป็นชุดของตัวแปรชนิด integer ที่เก็บตัวเลขจำนวนเต็ม หรือ array of char ก็จะเป็นชุดของตัวแปรชนิด character ที่จะเก็บข้อมูลเป็นตัวอักขระ(ตัวอักษร 1 ตัว) แต่ถ้าเป็นภาษาซี array of char ก็คือ string นั่นเอง แต่สำหรับภาษา php ไม่ใช่ยังงั้นครับ คำจำกัดความของ array ในภาษา php มีอยู่อย่างเดียวครับ คือ เป็นชุดของตัวแปร แต่ไม่ได้บอกว่าเป็นชนิดเดียวกันหรือเปล่า นั่นหมายความว่ามันสามารถ mixed เข้าด้วยกันได้ครับ ยกตัวอย่าง ตัวอย่างที่ 1
<?php $arr = Array(1,"Hello World",3.5); ?>
ตัวอย่างที่ 2
<?php $arr = Array(); $arr[] = 1; $arr[] = "Hello World"; $arr[] = 3.5; ?>
ทั้งสองตัวอย่างนี้จะได้ผลเหมือนกันนะครับคือ $arr[0] มีค่าเป็น 1 $arr[1] มีค่าเป็น "Hello World" $arr[2] มีค่าเป็น 3.5 ถ้าพูดกันถึงเรื่อง array ของภาษาโปรแกรมมิ่งต่างๆ แล้วนะครับ จะแบ่งออกเป็นสองประเภท ขึ้นอยู่กับว่าภาษาไหนจะใช้อาเรย์แบบไหน สองประเภทนี้ก็คือ 1.numeric array เป็นอาเรย์ที่ใช้ index เป็นตัวเลขจำนวนเต็มและจะต้องเป็นตัวเลขที่เรียงติดๆกัน โดยส่วนมากจะถูกใช้ในภาษาที่ต้องใช้ compiler ในการแปลง source code ก่อน อย่างเช่นภาษาซี หรือจาว่า เป็นต้น นอกจากนั้นบางภาษายังจะสามารถใช้ index ของอาเรย์เป็นเลขติดลบได้ด้วย 2.associative array เป็นอาเรย์ที่ใช้ index ของอาเรย์เป็นตัวหนังสือ ถึงแม้จะไม่ใช่ตัวหนังสือก็จะมองว่าเป็นตัวหนังสือ โดยส่วนใหญ่จะใช้ในภาษาที่ใช้ interpreter ในการแปรภาษาอย่างเช่น php เป็นต้น เพราะฉะนั้นเรามาดูตัวอย่างอาเรย์ที่เป็น associative array กัน
<?php $arr = array("somearray" => array(6 => 5, 13 => 9, "a" => 42)); echo $arr["somearray"][6]; // 5 echo $arr["somearray"][13]; // 9 echo $arr["somearray"]["a"]; // 42 print_r($arr); var_dump($arr); ?>
มาเรียนรู้ฟังก์ชั่นของ php เพิ่มเติมอีกซักสองฟังก์ชั่นนะครับคือ print_r() กับ var_dump() ฟังก์ชั่น print_r จะใช้สำหรับ อาเรย์เท่านั้นครับ เอาไว้สำหรับปริ๊นท์ค่าในอาเรย์ ส่วน var_dump จะใช้ได้กับตัวแปรทุกประเภท ทุกชนิด เห็นจนกระทั่งว่า ตัวแปรเป็นชนิดอะไรเลยล่ะครับ ลองเอาไปใช้ครับ จะช่วยเราได้เป็นอย่างดีครับ เวลาเราจะต้องการ debug โปรแกรม
สำหรับกฎในการตั้งชื่อตัวแปรนะครับ การตั้งชื่อตัวแปรนั้น regular expression(ผมก็ไม่รู้จะแปลเป็นไทยยังไง ขออนุญาตทับศัพท์เลยละกัน)ของชื่อตัวแปรจะต้องถูกรูปแบบนี้ครับ '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*' อ่านออกมั๊ยครับ เดี๋ยวจะขออธิบายเรื่องนี้อีกทีในเรื่อง expression แล้วกันนะครับ
เพิ่มเติม: ตัวแปรที่ไม่ได้เป็นตัวแปรชนิด อาเรย์สามารถเรียกได้อีกอย่างว่าตัวแปร scalar สามารถตรวจสอบได้โดยใช้ฟังก์ชั่น is_scalar()
ที่มา : http://www.php.net
กรุณาล็อกอิน หรือลงทะเบียนเพื่อจะเขียนความคิดเห็น |
|
แก้ไขล่าสุดเมื่อ ( 06 มิ.ย. 2008 10:59น. )
|