Display Pagerank

เข้าสู่ระบบ

ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน
มกราคม 07, 2009, 09:42:08 PM
ชื่อผู้ใช้งาน: รหัสผ่าน:
เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ลืมรหัสผ่าน?
Tags

MVC

MVC คืออะไร

ORM

ORM คืออะไร

ACL

ACL คืออะไร

CakePHP

CakePHP คืออะไร

CodeIgniter

CodeIgniter คืออะไร

Framework

Framework คืออะไร

ภาษา PHP

PHP จิปาถะ

CMS

CMS คืออะไร

ใครออนไลน์อยู่บ้าง?

ขณะนี้มี 1 บุคคลทั่วไปออนไลน์

Designed by:
SiteGround web hosting Mambo templates
บทที่ 5 สำนวนทางภาษา(Expression) PDF พิมพ์ อีเมล
เขียนโดย สุริยา แก้วมุงเมือง   
04 มิ.ย. 2008 23:44น.

    สำนวนทางภาษานับว่ามีความสำคัญมากในการสร้างโปรแกรมที่มีประสิทธิภาพของภาษา PHP ในภาษา PHP นั้น โดยมากแล้ว ไม่ว่าสิ่งใดก็ตามคุณจะเขียนในรูปแบบสำนวนทางภาษาหรือ expression(จะขอใช้คำว่า expression แล้วกันนะครับ เพราะเรียกง่ายกว่า) วิธีที่แม่นยำที่ง่ายที่สุดในการนิยาม expression ก็คือ "ไม่ว่าสิ่งใดก็ตามจะมีค่าอยู่ 1 ค่า"

    รูปแบบที่เป็นพื้นฐานของ expression ก็คือ ตัวเก็บค่าคงที่(constants) และตัวแปร(variables) เมื่อคุณพิมพ์ "$a = 5" นั้นหมายความว่าคุณกำลังกำหนดค่า '5' ให้กับ $a ค่า '5' นั้นที่เราเห็นๆกันก็คือมีค่าเป็น 5 หรือพูดอย่างหนึ่งก็คือ '5' เป็น expression อันหนึ่ง ที่มีค่าเป็น 5(ในกรณีนี้ '5' เป็นค่าคงที่ที่เป็นจำนวนเต็ม)

    หลังจากที่เรากำหนดค่าอย่างนี้แล้ว คุณก็หวังว่าค่าของ $a จะเป็น 5 อย่างไม่มีข้อสงสัย ดังนั้นถ้าคุณเขียน $b = $a คุณก็หวังว่ามันจะพฤติกรรมเหมือนกับว่าคุณได้เขียน $b = 5 หรือพูดอีกอย่างหนึ่ง $a นั้นเป็น expression อันหนึ่งที่มีค่าเป็น 5 อย่างถูกต้อง ถ้าทุกสิ่งทุกอย่างทำงานถูกต้อง มันก็จะเกิดขึ้นแบบนี้จริงๆ

    ตัวอย่างที่ดูยุ่งยากขึ้นมานิดนึงสำหรับเรื่อง expression ก็คือเรื่องฟังก์ชั่น ยกตัวอย่าง ให้พิจารณาฟังก์ชั่นต่อไปนี้
    <?php
        function foo ()
        {
            return 
5;
        }
    
?>

    สมมติว่าคุณคุ้นเคยกับ concept ของฟังก์ขั่นเป็นอย่างดี(ถ้าไม่ใช่ให้เปิดไปดูบทที่เกี่ยวกับเรื่องฟังก์ชั่นครับ) สมมติว่าคุณพิมพ์ว่า $c = foo() โดยพื้นฐานแล้วมันก็จะเหมือนกับ $c = 5 และคุณก็ถูกต้อง  ฟังก์ชั้นนั้นเป็น expression ที่มีค่าจากการที่มันคืนค่ากลับมา(return value) ดังนั้น foo() คืนค่า 5 ค่าของ expression 'foo()' จึงเป็น 5 โดยปกติแล้ว ฟังก์ชั่นจะไม่คืนค่าที่เป็นค่าคงตัว แต่ว่าจะคำนวนอะไรบางอย่าง

    และแน่นอนที่สุด ค่าต่างๆในภาษา PHP บ่อยครั้งไม่ได้เป็นค่าจำนวนเต็ม  PHP นั้นสนับสนุนค่า scalar อยู่ 4 ชนิด คือ ค่าเลขจำนวนเต็ม(integer) เลขทศนิยม(float) สายอักขระ(string) และค่าบูลีน(boolean) (ค่า scalar ก็คือค่าที่คุณจะไม่สามารถแตกออกเป็นชิ้นเล็กๆได้อีก ตัวอย่างเช่น array)  PHP สนับสนุนค่าชนิดผสม(ที่ไม่ใช่ scalar)อยู่สองชนิด คือ array และ object ซึ่งแต่ละตัวนั้นสามารถถูกกำหนดให้เป็นตัวแปรที่สามารถถูกคืนค่าได้จากฟังก์ชั่น

    ภาษา PHP ใช้ expression เพิ่มมากขึ้นเรื่อย ในบางครั้ง ภาษาอื่นๆหลายๆภาษาก็ทำเหมือนกัน   PHP เป็นภาษาที่อ้างอิงตามสำนวน(Expression-Oriented Language)  ในแนวคิดที่ว่า ทุกๆสิ่งทุกๆอย่างเป็น expresion หมด ให้พิจารณาตัวอย่างที่เรามีอยู่แล้วข้างต้น '$a = 5' ง่ายมากที่จะเห็นว่า มีค่าอยู่สองค่าที่เกี่ยวข้องกัน คือค่าของเลขจำนวนเต็มคงที่ '5' และค่าของ $a ซึ่งจะถูกเปลี่ยนให้เป็น 5 แต่ว่าในความเป็นจริงแล้วก็คือว่า มันจะมีอยู่อีกหนึ่งค่าที่เกี่ยวข้องเพิ่มเติมมา และค่านั้นก็เป็นค่าที่มันถ่ายค่าให้ตัวมันเอง  ค่าที่มันถ่ายให้ตัวเองนั้น จะสมมูลกับค่าที่มันได้รับ ในกรณีนี้คือ 5 จากตัวอย่างมันหมายความว่า '$a = 5' ที่เราไม่ได้คำนึงถึงสิ่งที่มันทำ มันก็เป็น expresion อันหนึ่งที่มีค่าเป็น 5 ดังนั้น การเขียนแบบนี้ '$b = ($a = 5)' มันก็จะเหมือนกับการเขียนแบบนี้ '$a = 5; $b = 5;'(เครื่องหมาย semicolon เป็นเครื่องหมายเพื่อบอกว่าจบบันทัดคำสั่ง) เพราะว่าการให้ค่านั้นจะถูกตรวจไวยากรณ์ให้ถูกต้องตามลำดับไปยังส่วนที่เหลือ คุณสามารถเขียนแบบนี้ได้ '$b = $a = 5'

    ตัวอย่างที่ดีอีกอันหนึ่งของเรื่อง expression ก็คือการเพิ่มค่าและการลดค่าทั้งก่อน(pre) และ หลัง(post)   ผู้ใช้ภาษา PHP และภาษาอื่นๆอีกหลายๆภาษา อาจจะมีความคลายคลึงกันกับสัญลักษณ์ในรูปแบบ variable++ และ variable--  พวกนี้เป็นตัวดำเนินการเพิ่มค่าและการลดค่า ใน PHP/FI 2 นั้น บันทัดคำสั่ง '$a++' นั้นจะไม่มีค่า(ไม่ได้เป็น expression) ดังนั้นคุณจึงไม่สามารถให้ค่ามันหรือใช้มันในทางอื่นได้ ภาษา PHP ได้มีการปรับปรุงความสามารถของการเพิ่มค่า/การลดค่า โดยการทำพวกนี้ให้เป็น expression เหมือนกับภาษา C    ใน PHP นั้น(ที่เหมือนกับ C) จะมีการเพิ่มค่าอยู่สองชนิด คือการเพิ่มค่าก่อน(pre-increment) และการเพิ่มค่าทีหลัง(post-increment) ทั้งสองตัวแล้วโดยพื้นฐานจะเอาไว้ใช้สำหรับเพิ่มค่าตัวแปร และจะมีผลกับตัวแปรที่ระบุ ความแตกแต่งของสองตัวนี้ก็คือค่าของ expression ที่เพิ่ม Pre-increment นั้น ซึ่งจะถูกเขียนได้เป็น '++$variable' มันจะสมมูลกับค่าที่เพิ่ม(PHP จะเพิ่มค่าตัวแปรก่อนที่จะอ่านค่าของมัน ดังนั้นชื่อมันจึงเป็น pre-increment) สำหรับ Post-increment นั้น จะถูกเขียนได้เป็น '$variable++' จะสมมูลกับค่าเริ่มแรกของ $variable ที่ก่อนจะมีการเพิ่มค่า(PHP เพิ่มค่าหลังจากที่มีการอ่านค่าของมันไปแล้ว ดังนั้นจึงเรียกว่า post-increment)

    ชนิดโดยทั่วๆไปของ expression คือเป็น expression การเปรียบเทียบ  expression พวกนี้จะสมมูลกับถ้าไม่ใช่ค่า FALSE ก็เป็น TRUE   ภาษา PHP สนับสนุน > (มากกว่า), >=(มากกว่าหรือเท่ากับ), ==(เท่ากัย), !=(ไม่เท่ากับ), <(น้อยกว่า) และ <=(น้อยกว่าหรือเท่ากับ) ภาษาจะสนับสนุนชุดของตัวดำเนินการที่สมมูลกันแบบเข้มงวดนั่นก็คือ ===(เท่ากันและชนิดเหมือนกัน) และ !==(ไม่เท่ากัน หรือ ชนิดไม่เหมือนกัน) expression พวกนี้เป็นถูกใช้มากภายในการดำเนินการตรวจสอบเงื่อนไข อย่างเช่น if เป็นต้น

    ตัวอย่างสุดท้ายของเรื่อง expression ที่เราจะดำเนินการตรงนี้ก็คือการผสม expression ตัวดำเนินการการให้ค่า คุณทรายอยู่แล้วว่า ถ้าคุณต้องการจะเพิ่มค่า $a ไป 1 ค่า คุณสามารถเขียนง่ายเลยแบบนี้ '$a++' หรือ '++$a' แต่ว่าถ้าคุณต้องการเพิ่มมากกว่า 1 ค่า ยกตัวอย่างเช่น 3 คุณสามารถเขียน '$a++' หลายๆ ครั้งได้ แต่ว่าวิธีนี้มันไม่สะดวกสบายในการใช้ ในทางปฏิบัติโดยทั่วไปจะเขียน '$a = $a + 3'  ซึ่ง '$a + 3' นั้นจะสมมูลกับค่าของ $a ที่บวกเพิ่มค่าอีก 3 และการให้ค่าอันนี้จะเอาค่ากลับไปเก็บไว้ใน $a ซึ่งเป็นผลลัพธ์ในการเพิ่มค่า $a ด้วย 3 ใน PHP จะเหมือนกับภาษาอื่นๆอีกหลายภาษา เช่น C คุณสามารถเขียนแบบนี้ได้ในรูปแบบสั้น ซึ่งจะชัดเจนกว่าและง่ายต่อการทำความเข้าใจมากกว่า การเพิ่ม 3 ไปยังตัวแปรปัจจุบัน ก็คือ $a สามารถถูกเขียนได้เป็น '$a += 3' แบบนี้หมายความว่า "นำค่าของ $a บวกไป 3 แล้วเก็บที่ $a" ในการเพิ่มค่าจะสั้นกว่าและชัดเจนกว่า ได้ผลลัพธ์ในขณะที่การประมวลผลเร็วกว่า  ค่าของ '$a += 3' มันจะเหมือนกับการให้ค่าตามปกติ ให้สังเกตุว่ามันไม่ใช่ 3 แต่ว่ามันจะรวมค่าของ $a บวกด้วย 3 (นี่เป็นค่าที่ถูกให้ไปยัง $a) ตัวดำเนินการสองตำแหน่งใดๆ สามารถถูกใช้ในโหมดนี้ได้ ยกตัวอย่างเช่น '$a -=5'(ลบ 5 จากค่าของ $a), '$b *=7'(คุณค่า $b ด้วย 7) เป็นต้น

    มีอยู่อีก expression หนึ่งที่อาจจะดูแปลกๆซักหน่อยถ้าคุณยังไม่เคยเห็นในภาษาอื่นๆ คือในตัวดำเนินการเงื่อนไข
    <?php
        $first $second $third
    ?>

    ถ้าค่าของ expression ย่อยอันแรกเป็นจริง(TRUEหรือไม่ใช่ 0) แล้ว expression ย่อยอันที่สองจะถูกคำนวนค่า และนั่นจะเป็นผลผลลัพธ์ expression ของเงื่อนไข แต่ถ้าค่าของ expression ย่อยอันแรกเป็นเท็จ(FALSE หรือเป็น 0) expression ย่อยอันที่สาม จะถูกคำนวนค่าและเป็นค่าผลลัพธ์ของ expression ของเงื่อนไข

    ตัวอย่างต่อไปนี้จะช่วยให้คุณเข้าใจในเรื่อง การเพิ่มค่าก่อนและหลังและ expression ในทั่วๆไป ได้ดียิ่งขึ้น
    <?php
        function double($i)
        {
            return 
$i*2;
        }
        
$b $a 5;        /* assign the value five into the variable $a and $b */
        $c $a++;          /* post-increment, assign original value of $a 
                               (5) to $c */
        $e $d = ++$b;     /* pre-increment, assign the incremented value of 
                               $b (6) to $d and $e */

        /* at this point, both $d and $e are equal to 6 */

        $f double($d++);  /* assign twice the value of $d before
                               the increment, 2*6 = 12 to $f */
        $g double(++$e);  /* assign twice the value of $e after
                               the increment, 2*7 = 14 to $g */
        $h $g += 10;      /* first, $g is incremented by 10 and ends with the 
                               value of 24. the value of the assignment (24) is 
                               then assigned into $h, and $h ends with the value 
                       of 24 as well. */
    ?>


    expression บางตัว สามารถพิจารณาให้เป็นบันทัดคำสั่ง(statement)ได้ ในกรณีนี้ บันทัดคำสั่งอันนึง จะมีรูปแบบ 'expr' ';' นั่นก็คือ expression นึงที่ตามด้วย semicolon อันนึง และใน '$b=$a=5;' ตรงส่วน $a=5 นั้นเป็น expression ที่ถูกต้อง แต่ว่ามันไม่เป็นบันทัดคำสั่งโดยตัวมันเอง ดังนั้น '$b=$a=5' จึงเป็นบันทัดคำสั่งที่ถูกต้อง

    สิ่งที่สุดท้ายที่สำคัญที่จะกล่าวถึงก็คือค่าจริงๆของ expression  ในกรณีต่างๆ การประมวลผลเงื่อนไขและการวนซ้ำโดยหลักๆแล้ว คุณไม่ได้สนใจค่าที่ระบุไว้ใน expression แต่ว่าจะใส่ใจแค่ว่ามันมีความหมายว่า TRUE หรือ FALSE เท่านั้น   ค่าคงที่ TRUE และ FALSE (case-insensitive)นั้น เป็นค่าบูลีนที่เป็นไปได้สองค่า เมื่อจำเป็น expression อันนึงถูกแปลงเป็นบูลีน โดยอัตโนมัติ ให้ดูบทที่เกี่ยวกับ type-casting สำหรับรายละเอียดวิธีการว่ามันทำอย่างไร

 

ที่มา : http://www.php.net


ความคิดเห็นผู้ใช้

กรุณาล็อกอิน หรือลงทะเบียนเพื่อจะเขียนความคิดเห็น

แก้ไขล่าสุดเมื่อ ( 06 มิ.ย. 2008 11:01น. )