ฟังชั่น

ฟังชั่น (function) จะแบ่งเป็น 2 ประเภทคือ

  • ฟังชั่นที่มากับตัวภาษา (built-in function) เช่น abs(), max(), min()
  • ฟังชั่นที่สร้างขึ้นเอง

ในที่นี้จะพูดถึงการสร้างฟังชั่นขึ้นมาใช้เอง ส่วน built-in function ดูได้จาก W3School (แต่อาจจะนำมาเขียนถึงในบางฟังชั่น)

การสร้างฟังชั่น จะมีรูปแบบประมาณนี้

    <?php

    function function_name($parameter) {
        // code
    }

ตัวอย่างการสั่งพิมพ์ข้อความโดยไม่มีการส่งค่า และคืนค่า

    <?php

    function stand_up() {
        echo 'Please stand up!';
    }

    stand_up();
    // print: Please stand up!

สำหรับการส่งค่าไปยังฟังชั่น สามารถสั่งได้ 2 แบบคือ

  • By Value เป็นส่งค่าของตัวแปรไปให้ ซึ่งค่าที่ถูกแก้ไขในฟังชั่นจะไม่ทำให้ค่าของตัวแปรที่ส่งเปลี่ยนแปลงไป
  • By Reference เป็นส่งตำแหน่งอ้างอิงของตัวแปรไปให้ ซึ่งทำให้ค่าของตัวแปรที่ส่งเปลี่ยนแปลงไป การส่งค่าแบบ by reference จะใช้ & นำหน้าชื่อตัวแปร
    <?php

    // By value function
    function double($num) {
        echo 'Double value of ' . $num . ' is ';
        $num = $num * 2;
        echo $num;
    }
    // By reference function
    function half(&$num) {
        echo 'Half value of ' . $num . ' is ';
        $num = $num / 2;
        echo $num;
    }

    $x = 50;

    double($x);
    // print: Double value of 50 is 100
    echo $x;
    // print: 50

    half($x);
    // print: Half value of 50 is 25
    echo $x;
    // print: 25

นอกจากนี้ยังกำหนดค่าโดยปริยาย (default) ให้กับพารามิเตอร์ของฟังชั่นได้โดยใช้ = ส่วนมากมักจะใส่ตัวแปรที่มีค่าโดยปริยายไว้หลังสุด

    <?php

    function vat_include($prize, $vat = 7) {
        $total = $prize + (($prize * $vat) / 100);
        echo 'Payment: ' . $total;
    }

    // use default vat = 7%
    vat_include(200);
    // print: Payment: 214

    // use custom vat = 10%
    vat_include(1000, 10);
    //print: Payment: 1100

การคืนค่าจากฟังชั่น ใช้ return

    <?php

    function power_up($num) {
        return $num * $num;
    }

    $pow = power_up(20);
    // $pow = 400

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

    <?php

    function divide_func($base, $divider) {
        if (0 == $divide) {
            echo 'Cannot divide by zero';
            return;
        }
        $result = $base / $divider;
        echo 'Result is ' . $result;
    }

ใช้ฟังชั่นเมื่อไหร่? ใช้เมื่อรู้สึกว่า จะต้องเขียนชุดคำสั่งเดิม ๆ มากกว่า 1 ครั้ง จำไว้ว่า โปรแกรมเมอร์นั้นขี้เกียจ เราจะไม่เขียนชุดคำสั่งเดิม ๆ ซ้ำเป็นครั้งที่ 2 (ที่จริง เพื่อให้แก้ไขจัดการง่าย ถ้าหากโค้ดมีบั๊ก แก้ที่เดียวจบ)

blog comments powered by Disqus