ตัวอย่าง คำสั่ง SQL

ตัวอย่าง คำสั่ง
1.สร้าง DATABASE
mysql > create database  <ชื่อdatabase>;
 เช่น        create database world;
2.สร้าง table
mysql > create table <ชื่อtable> (<ชื่อข้อมูล> <ชนิดข้อมูล>, ... );
 เช่น create table human (name VARCHAR(20), birth DATE, sex CHAR(1));
ชนิดข้อมูล เช่น
 VARCHAR(n) - ข้อมูลชนิด string เก็บแบบ linked list เหมาะสมกับข้อมูลที่มีความยาวที่ไม่แน่นอน
 CHAR(n) - ข้อมูลชนิด string เก็บแบบ array เหมาะสมกับข้อมูลที่มีความยาวที่แน่นอน
 INT - จำนวนเต็ม
 DATE - ข้อมูลชนิดพิเศษของ SQL ใช้เก็บวันที่ มีรูปแบบเป็น YYYY-MM-DD
3.การสืบค้นข้อมูล หรือการดูข้อมูล
 SELECT <สิ่งที่ต้องการ>
 FROM   <ชื่อtable>
 WHERE <เงื่อนไขอื่นๆ>
เช่นต้องการชื่อของข้อมูลในตาราง human ที่มีมีเพศชาย
 SELECT name
 FROM   human
 WHERE sex = ‘M’; 
ต้องการดูข้อมูลทั้งหมดในตาราง human [* คือทั้งหมด]
 SELECT *
 FROM   human;
ซึ่งการกำหนดเงื่อนไขนั้นเราสามารถใช้ตัวแปรทางคณิตศาสตร์ตรรกะ มาช่วยได้เช่น
 AND และ
 OR หรือ
 < น้อยกว่า
 > มากกว่า
 <= น้อยกว่าหรือเท่ากับ
 >= มากกว่าหรือเท่ากับ
 <> ไม่เท่ากับ
 UNION การนำ 2 ตารางมาเชื่อมต่อกันตัดตัวซ้ำ
 UNION ALL การนำ 2 ตารางมาเชื่อมกันโดยไม่ตัดตัวซ้ำ
 INTERSECT ข้อมูลที่ซ้ำกัน
4.ORDER BY เรียงลำดับข้อมูล การจัดกลุ่มข้อมูล
เรียงลำดับจากมากไปน้อย (descending order)
เช่น SELECT *
 FROM   human
 ORDER BY name;
เรียงลำดับจากน้อยไปมาก (descending order)
เช่น SELECT *
 FROM   human
 ORDER BY name DESC;
ถ้าต้องการมากกว่าอันนึงก็ย่อมได้
เช่น SELECT *
 FROM   human
 ORDER BY name , sex DESC ;
แบบนี้จะจัดตามชื่อแบบ ascending ก่อนแล้วจะมาจัดเพศแบบ descending ทีหลัง
5.การใช้ตัวแปร NULL ในเงื่อนไข
 ใช้คำสั่ง xxx IS NOT NULL เช่นต้องการดูสิ่งมีชีวิตที่ไม่มีเพศ
 SELECT *
 FROM   human
 WHERE sex IS NOT NULL;
6.การตั้งชื่อเป็นชื่อที่เราต้องการ
 หมายถึงเวลา select บางทีคนทั่วไปอาจจะไม่เข้าใจว่าคืออะไร เราจึงมีคำสั่ง AS ช่วย เช่น
 SELECT name AS ‘NAME-SURNAME’
 FROM   human;
7.COUNT การนับจำนวน + GROUP BY การจัดกลุ่ม
 COUNT ใช้ในการนับจำนวนของตารางต่างๆ จะใช้คู่กับ GROUP BY ได้ดีเพราะจะช่วยในการจัดกลุ่มชุดข้อมูลได้ดีขึ้น
 SELECT <อื่นๆ> COUNT(*)
 FROM <ชื่อtable>
 WHERE <เงื่อนไข>
 GROUP BY <จัดกลุ่มโดยใช้อะไร>
เช่นต้องการนับจำนวนคนในแต่ละเพศ
 SELECT sex , COUNT(*)
 FROM   human
 GROUP BY sex;
SET การกำหนดตัวแปร
 SET @<ชื่อตัวแปร> = <ค่า>
 เช่น  SET @A1 = ‘Natsu Sencho’;
  SET @A2 = ‘1999-09-09’;
8.คำสั่งแบบหลายเงื่อนไข
Select  <filed_1 , filed_2 , … , filed_n  /  *  >
From  <Table_name> 
Where  < condition-1 >
<And / Or >  <condition-2>  ;
And ให้ผลเหมือนการ  Intersection
Or ให้ผลเหมือนการ  Union
เช่น    Select * from work 
                    Where proj_num = 15 ;  (เลือกข้อมูลการทำงานโครงการ 15)
Select * from work 
                    Where hours  > 3 ;  (เลือกข้อมูลการทำงานที่มากกว่า 3 ชั่วโมง)
Select * from employee
                    where job = "Programmer"  ; (เลือกพนักงานที่เป็น Programmer)
9.คำสั่งแบบหลายเงื่อนไข
Select  <filed_1 , filed_2 , … , filed_n  /  *  >
From  <Table_name> 
Where  < condition-1 >
<And / Or >  <condition-2>  ;
And ให้ผลเหมือนการ  Intersection
Or ให้ผลเหมือนการ  Union
เช่น select * from work
where proj_num  = 15   and hours  > 3 ;
(เลือกพนักงานที่ทำงานโครงการ 15 และทำงานมากกว่า 3 ชั่วโมง : ต้องอยู่โครงการ 15)
select * from work
where proj_num  = 15  or hours  > 3 ;
(เลือกพนักงานที่ทำงานโครงการ 15 หรือทำงานมากกว่า 3 ชั่วโมง : อาจทำงานอยู่โครงการอื่น)
10.คำสั่งที่มีการใช้งานหลายตาราง (join)
Select  <filed_1 , filed_2 , … , filed_n  /  *  >
From  <table_1 , table_2 , …, table_n
Where  < condition-1 > ;
       1. ต้องมีการเชื่อม PK และ FK ของทั้งสองตารางเข้าด้วยกัน (Join)
   2.หากมี field ใดที่ชื่อซ้ำกันทั้งสองตาราง
          เมื่ออ้างถึง ต้อง ระบุชื่อตาราง ตามด้วยชื่อฟิลด์ เช่น
          work.emp_num หรือ employee.emp_num
เช่น Select  employee.emp_num , emp_name , hours
From    employee , work
Where  employee.emp_num = work.emp_num  ;
( แสดงข้อมูลรหัสพนักงาน ชื่อพนักงาน และชั่วโมงทำงาน
 เนื่องจาก  ชื่อพนักงาน อยู่คนละตารางกับ ข้อมูลชั่วโมงทำงาน

 จึงต้องมีการ join ตารางที่มีข้อมูลเข้าด้วยกัน)

คำสั่ง SQL

ภาษา SQL
           (สามารถอ่านออกเสียงได้ 2 แบบ คือ เอสคิวแอล” (SQL) หรือ ซีเควล” (Sequel) ย่อมมาจาก Structured Query Language หรือภาษาในการสอบถามข้อมูล เป็นภาษาทางด้านฐานข้อมูล ที่สมารถสร้างและปฏิบัติการกับฐานข้อมูลแบบสัมพันธ์ (Relational Database) โดยเฉพาะ และเป็นภาษาที่มีลักษณะคลายกับภาษาอังกฤษ ภาษา SQL ถูกพัฒนาขึ้นจากแนวคิดของ Relational Calculus และ Relational Algebra เป็นหลัก ภาษา SQL เริ่มพัฒนาครั้งแรกโดย Almaden Research Center ของบริษัท IBM โดยมีชื่อเริ่มแรกว่า ซีเควล” (Sequel) ต่อมาได้เปลี่ยนชื่อเป็น เอสคิวแอล” (SQL) หลังจากนั้นภาษาSQL ได้ถูกนำมาพัฒนาโดยผู้ผลิตซอฟต์แวร์ด้านระบบจัดการฐานข้อมูลเชิงสัมพันธ์จนเป็นที่นิยมกันอย่างแพร่หลายในปัจจุบัน โดยผู้ผลิตแต่ละรายก็พยายามที่จะพัฒนาระบบจัดการฐานข้อมูลของตนให้มีลักษณะเด่นเฉพาะขึ้นมา ทำให้รูปแบบการใช้คำสั่ง SQL มีรูปแบบที่แตกต่างกันไปบ้าง เช่น Oracle Access SQL Base ของ Sybase Ingres หรือ SQL Server ของ Microsoft เป็นต้น ดังนั้นในปี ค.ศ. 1986 ทางด้าน American National Standards Institute (ANSI) จึงได้กำหนดมาตรฐานของ SQL ขึ้น อย่างไรก็ดี โปรแกรมฐานข้อมูลที่ขายในท้องตลาด ได้ขยาย SQL ออกไปจนเกินข้อกำหนดของ ANSI โดยเพิ่มคุณสมบัติอื่น ๆ ที่คิดว่าเป็นประโยชน์เข้าไปอีก แต่โดยหลักทั่วไปแล้วก็ยังปฏิบัติตามมาตรฐานของ ANSI ในการอธิบายคำสั่งต่าง ๆ ของภาษาSQL

ประเภทของคำสั่งในภาษา SQL 
ภาษา SQL เป็นภาษาที่ใช้งานได้ตั้งแต่ระดับเครื่องคอมพิวเตอร์ส่วนบุคคลพีซีไปจนถึงระดับเมนเฟรม ประเภทของคำสั่งในภาษา (SQL The Subdivision of SQL) แบ่งออกเป็น 3 ประเภท คือ
1. ภาษาสำหรับการนิยามข้อมูล(Data Definition Language :DDL) ประกอบด้วยคำสั่งที่ใช้ในการกำหนดโครงสร้างข้อมูลว่ามีคอลัมน์อะไร แต่ละคอลัมน์เก็บข้อมูลประเภทใด รวมถึงการเพิ่มคอลัมน์การกำหนดดัชนี การกำหนดวิวหรือตารางเสมือนของผู้ใช้ เป็นต้น
2. ภาษาสำหรับการจัดการข้อมูล (Data Manipulation Language :DML) ประกอบด้วยคำสั่งที่ใช้ในการเรียกใช้ข้อมูลการเปลี่ยนแปลงข้อมูล การเพิ่มหรือลบข้อมูล เป็นต้น
3. ภาษาควบคุม (Data Control Language : DCL)ประกอบด้วยคำสั่งที่ใช้ในการควบคุมการเกิดภาวะพร้อมกัน หรือการป้องกันการเกิดเหตุการณ์ที่ใช้หลายคนเรียกใช้ข้อมูลพร้อมกัน และคำสั่งที่เกี่ยวข้องกับการควบคุมความปลอดภัยของข้อมูลด้วยการกำหนดสิทธิ์ของผู้ใช้ที่แตกต่าง เป็นต้น

ข้อสอบ O-NET [วิชาคอมพิวเตอร์]

1.   ข้อใดไม่ใช่ ขั้นตอนหลักในการทำงานของคอมพิวเตอร์
            ก.  ประมวลผล                        ข.  เก็บข้อมูล 
             ค.  รับข้อมูล                ง.  แสดงผลลัพธ์     
            จ.  นำข้อมูลเข้า (คนที่จะนำข้อมูลเข้าได้ก็คือ User ค่ะ)
2.  หน่วยข้อมูลที่เล็กที่สุดในระบบคอมพิวเตอร์เรียกว่า
            ก.  บิต    ( 1 กับ 0)                  ข.  ไบต์ 
             ค. ฟิลด์                                   ง.  เร็คคอร์ด
             จ. ไฟล์
3.  ข้อมูลเมื่อผ่านการประมวลผลแล้ว จะได้อะไร
            ก.  Document                        ข.   Report
            ค.  Information                       ง.  Output
            จ.  Database
4.  สัญญาณในคอมพิวเตอร์เป็นสัญญาณชนิดใด
             ก.  อนาล็อก                 ข.  ดิจิตอล  
            ค.  ไฮบริค                    ง.  ไฟฟ้า
            จ. อิเล็กทรอนิกส์
5.ข้อใดต่อไปนี้ถูกต้องที่สุด
            ก.การบันทึกข้อมูลลงแผ่นดีวีดีใช้เทคโนโลยีแบบแม่เหล็ก
            ข.หมายเลขไอพีเป็นหมายเลขที่ใช้กำกับ Network Interface Card
            ค.หน่วยความจำสำรองเป็นหน่วยความจำที่มีคุณลักษณะแบบ Valatile
            ง.รหัส ASII และ EBIDIC เป็นการวางรหัสตัวอักษรที่ใช้ขนาด 8 บิต
6. ข้อใดเป็นการใช้งานโปรแกรม Google Earth ได้ถูกต้องตามวัตถุประสงค์
            ก. ใช้โปรแกรม Google Earth ค้นหาภาพถ่าย
            ข. ใช้โปรแกรม Google Earth สำรวจถนนเพื่อการเดินทาง
            ค. ใช้โปรแกรม Google Earth สร้างภาพกราฟิกสามมิติ
            ง. ใช้โปรแกรม Google Earth เพื่อช่วยการเรียนการสอนวิชาดาราศาสตร์
7. ผู้กระกอบอาชีพ เป็นผู้พัฒนาเว็บไซต์ต้องเชี่ยวชาญความรู้ด้านใดบ้าง จากตัวเลือกต่อไปนี้
                        ก. ฮาร์ดแวร์     ข. คอมพิวเตอร์    ง. HTML  จ. ระบบฐานข้อมูล   ค. เว็บเซิร์ฟข้อมูล    ฉ. ภาษาจาวา ( JAVA)
            ก. ข้อ ก. และ ค.
            ข. ข้อ ข. และ จ.
            ค. ข้อ ค. และ ง.
            ง. ข้อ ก. และ จ.
8. ใช้คอมพิวเตอร์ อย่างไรจึงจะช่วยลดโลกร้อน
            ก. ปิดเครื่องเมื่อไม่ใช้งาน และพิมพ์งานเมื่อจำเป็น
            ข. เลือกใช้จอแอลซีดีและปรับปรุงซอร์ฟแวร์ให้ทันสมัย
            ค. ใช้คอมพิวเตอร์วันละ 1 ชม. และรักษาความสะอาดอยู่เสมอ
            ง. ไม่เชื่อมระบบบนเครือข่ายและใช้เครื่องพิมพ์ Inkjet เท่านั้น
9. ข้อใดเป็นการใช้แป้นพิมพ์ที่ไม่ถูกต้อง
            ก. วางแป้นพิมพ์ในที่มีอากาศถ่ายเทสะดวก
            ข. ระมัดระวังมิให้แป้นพิมพ์ได้รับการกระแทก
            ค. ใช้แปรงขนอ่อนนุ่มปัดฝุ่นทำความสะอาดเสมอ
            ง. เมื่อเกิดคราบบนแป้นพิมพ์ ใช้ผ้าเช็ดออกทันที
10. การใช้งานคอมพิวเตอร์ในข้อใด อยู่ในขั้นจัดเก็บข้อมูล
            ก. กุ้ง ใช้แป้นพิมพ์ไร้สายพิมพ์รายงาน
            ข. สาว สั่งให้เครื่องคอมพิวเตอร์หาค่าเฉลี่ยเลขคณิต
            ค. ด้อย ใช้เครื่องพิมพ์ฉีดหมึกพิมพ์ภาพลงในกระดาษ A4

            ง. น้ำหวาน บันทึกงานวิจัยเชิงปริมาณลงในแผ่น DVD-R

ฟังก์ชันใน PHP 2

Function ในภาษา PHP มาอยู่ 4 ชนิดคือ
1.     ฟังก์ชั่นภายใน (invoking a function)
2.     ฟังก์ชั่นที่สร้างขึ้นมาเอง (creating a function)
3.     ฟังก์ชั่นซ้อนฟังก์ชั่น (nesting function)
4.     ฟังก์ชั่นเรียกตัวเอง (recursive function)
1. ฟังก์ชั่นภายใน
เป็นฟังก์ชั่นพื้นฐานที่มากับ php (ชื่อก็บอกอยู่แล้ว) มีราวๆ พันกว่าฟังก์ชั่น (ใครเคยนับบ้างเนี่ย) ซึ่งจะครอบคลุมการทำงานพื้นฐานทั้งหมดของการเขียนโปรแกรม PHP จนบางครั้ง เราสามารถเขียนโปรแกรมที่ทำงานได้จริงโดยไม่จำเป็นต้องเขียนฟังก์ชั่นเพิ่มเติมเลยแม้แต่ฟังก์ชั่นเดียว เหมือนที่ผมเคยได้ยินมาว่า คนที่เขียนโปรแกรมเก่ง ไม่จำเป็นต้องเขียนโค๊ดได้ดี เพียงแค่รู้จักฟังก์ชั่น แล้วรู้จักใช้มันก็พอ
ฟังก์ชั่นภายในทั้งหลาย สามารถดูได้จาก help ของ PHP ได้ โดยโหลดได้ที่ http://www.php.net/docs.php
ตัวอย่างฟังก์ชั่นภายใน ผมขอยกตัวอย่างฟังก์ชั่น pow() ถ้าหากเปิดดู help จะเขียนเป็นลักษณะนี้
number pow ( number $base, number $exp )
·         number คือ ค่าที่ฟังก์ชั่นนี้ส่งกลับออกมา (return) ซึ่งเดี๋ยวเราค่อยมาอธิบายกัน
·         pow คือ ชื่อฟังก์ชั่น
·         (number $base, number $exp) คือ ค่าที่ต้องส่งให้ฟังก์ชั่นนี้ โดย number หมายถึงชนิดของค่า (datatype) ที่ต้องส่งไปให้
เพราะฉะนั้น ฟังก์ชั่น pow() เราต้องส่งค่าให้จำนวน 2 ค่า เมื่อฟังก์ขั่นทำงานเสร็จแล้วจะคืนค่ากลับมาเป็นชนิดตัวเลข
1
2
3
4
<?php
    $value = pow(5,2);  // เรียกฟังก์ชั่น pow() โดยส่งค่า 5 เป็นเลขฐาน และ 2 เป็นเลขชี้กำลัง แล้วเก็บค่าไว้ที่ตัวแปร $value
    echo $value;    // พิมพ์ค่าจากตัวแปร $value
?>
ถ้าหากเราไม่ได้นำค่าที่ได้ไปทำการคำนวน เราสามารถแสดงค่าออกมาได้เลย โดยไม่จำเป็นต้องเก็บค่าไว้ในตัวแปรใดๆ ลองดูตัวอย่างกันครับ
1
2
3
4
5
<?php
    echo pow(5,2);  // พิมพ์ค่า 5 ยกกำลัง 2 ออกทางหน้าจอเลย
    echo "<br />";
    echo "ผลลัพท์ของ 5 ยกกำลัง 2 คือ " . pow(5,2);
?>
เห็นไหมครับ ไม่ยากเลย แต่เราจะรู้ได้อย่างไรว่าฟังก์ชั่นไหน ใช้งานอย่างไร หรือเราจะใช้ฟังก์ชั่นไหนทำงานให้เรา อันนี้ก็ต้องอยู่ที่แต่ละท่านล่ะครับ ถ้าหากเล่นบ่อยๆ ก็จะพบกับฟังก์ชั่นที่เรายังไม่เคยใช้งานเองแหละครับ ถึงแม้ว่า PHP จะมีฟังก์ชั่นมากกว่า 1000 ฟังก์ชั่น แต่ที่ใช้งานทั่วๆ ไป จะมีไม่ถึง 200 ฟังก์ชั่นครับ (ลดไปเยอะเลย)
2.ฟังก์ชั่นที่สร้างขึ้นมาเอง
เป็นฟังก์ชั่นที่สร้างขึ้นมาเอง เพื่อให้ทำงานนอกเหนือจากฟังก์ชั่นที่มีอยู่ใน PHP หรือเราต้องการให้โปรแกรมทำงานตรงกับความต้องการของเรา รูปแบบการเขียนฟังก์ชั่นเป็นดังนี้
1
2
3
4
5
<?php
    function ชื่อฟังก์ชั่น (ค่าที่ส่งให้) {
        การทำงานของฟังก์ชั่น
    }
?>
ลองดูตัวอย่างการสร้างฟังก์ชั่นชื่อ cmdevhub() กันครับ
1
2
3
4
5
6
7
8
9
<?php
    function cmdevhub() {
        echo "welcome to cmdevhub";
    }

    // เราสามารถเรียกฟังก์ชั่นได้โดยเรียกจากชื่อฟังก์ชั่น

    cmdevhub(); // พิมพ์ welcome to cmdevhub
?>
เห็นไหมครับ ไม่ยากเลย ส่วนข้อกำหนดในการสร้างฟังก์ชั่นนั้นก็เหมือนกันการสร้างตัวแปรเลยครับ ถ้าหากจำไม่ได้ก็ย้อนกลับไปดูได้เลย
หลังจากเราสร้างฟังก์ชั่นได้แล้ว ฟังก์ชั่นของเราจะไม่มีประโยชน์อะไรเลยถ้าหากไม่สามารถรับค่าเพื่อใช้คำนวนตามที่เราต้องการได้ การส่งค่าให้ฟังก์ชั่นทำการคำนวนนั้นมี 2 รูปแบบคือ ส่งค่าไปตรงๆ เลย และ ส่งค่าอ้างอิงตำแหน่งของตัวแปร ส่วนวิธีการรับค่าของฟังก์ชั่นทำได้โดยใส่ตัวแปรเข้าไปใน ( ) มาดูตัวอย่างกัน
2.1 การส่งค่าโดยตรง
1
2
3
4
5
6
7
8
9
10
11
12
<?php
    function cArea($r) {    // ฟังก์ชั่นหาพื้นที่วงกลม
        echo $r * 22 / 7;
    }
    function sArea($h, $w) {    // ฟังก์ชั่นหาพื้นที่สี่เหลี่ยม
        echo $h * $w;
    }

    cArea(15);  // ผลลัพท์ 47.1428571429
    echo "<br />";
    sArea(3, 15); // ผลลัพธ์ 45
?>
เราสามารถส่งค่าไปให้ฟังก์ชั่นโดยใช้ค่าที่อยู่ในตัวแปรส่งไปได้ด้วย
1
2
3
4
5
6
7
8
9
<?php
    function sArea($h, $w) {
        echo $h * $w;
    }

    $width = 12;
    $height = 3;
    sArea($width, $height);
?>
ถ้าหากส่งค่าให้ฟังก์ชั่นมากเกินกว่าที่ฟังก์ชั่นรับไว้ ค่าที่เกินมา จะไม่ถูกนำไปใช้งาน แต่ถ้าหากส่งค่าไปไม่ครบจะเกิดข้อผิดพลาด Warning: Missing argument ตรงนี้ก็ระวังกันด้วยนะครับ
2.2 การส่งค่าอ้างอิงตำแหน่งตัวแปร
โดยปกติการส่งค่าให้ฟังก์ชั่นจะทำการส่งค่าของตัวแปรนั้นๆ เข้าไปยังฟังก์ชั่นเลย ถ้าหากต้องการผลลัพธ์ของการคำนวนก็ทำการคืนค่า (return) กลับมา แต่เราสามารถเขียนให้ง่ายกว่านั้นได้อีก โดยการส่งตำแหน่ง (address) ของตัวแปรนั้นเข้าไปยังฟังก์ชั่นแทน ก็สามารถทำการคำนวนและเปลี่ยนค่าของตัวแปรที่เราต้องการได้โดยไม่ต้องทำการคืนค่ากลับออกมา ตัวอย่างที่ผมใช้บ่อยและใช้ตลอดก็คือการคำนวนภาษี (ยังหาโปรแกรมอื่นๆ ที่ใช้ฟังก์ชั่นแบบนี้ไม่ได้เลย) ลองดูตัวอย่างกันครับ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
    function cal_tax(&$cost, $tax) {
        $cost += $cost * $tax;
    }

    $cost = 200;
    $tax = 0.07;

    echo "จำนวนเงินก่อนคำนวนภาษี " . $cost; // ผลลัพธ์ 200
    echo "<br />";

    cal_tax($cost, $tax);

    echo "จำนวนเงินหลังคำนวนภาษี " . $cost; // ผลลัพธ์ 214
?>
จะเ้ห็นว่า เราสามารถเปลี่ยนตัวแปร $cost โดยไม่ต้องทำการคืนค่าในฟังก์ชั่นเลย จริงๆ แล้ว ตัวอย่างด้านบนสามารถเขียนได้อีกแบบดังนี้
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
    function cal_tax($cost, $tax) {
        $cost += $cost * $tax;
        return $cost;
    }

    $cost = 200;
    $tax = 0.07;

    echo "จำนวนเงินก่อนคำนวนภาษี " . $cost;
    echo "<br />";

    $cost = cal_tax($cost, $tax);

    echo "จำนวนเงินหลังคำนวนภาษี " . $cost;
?>
ซึ่งผลลัพธ์ที่ได้จะเหมือนกันทุกอย่าง แต่การเรียกใช้งานจะไม่เหมือนกัน จุดนี้ก็แล้วแต่ล่ะครับ ว่าจะเลือกใช้วิธีไหน ถ้าหากทำงานเ็ป็นทีม การใช้งานฟังก์ชั่นที่คืนค่ากลับมาจะเข้าใจได้ง่ายกว่า แต่ถ้าหากทำงานไม่กี่คน หรือแค่คนเดียว การอ้างอิงหน่วยความจำจะทำให้โค๊ดสั่นกว่า และเข้าใจยากกว่า (ถ้าหากเราลืม อิอิ) เอาเ็ป็นว่า รู้ไว้เฉยๆ ก็ได้ครับ เพราะบางทีเราอาจจะไม่ได้เขียนฟังก์ชั่นแบบนี้เลยก็ได้ (แต่ลองใช้แล้วจะติดใจ)
2.3 การกำหนดค่าเริ่มต้นให้ฟังก์ชั่น
ในการสร้างฟังก์ชั่นที่ทำการรับค่านั้น เราจำเป็นที่จะต้องส่งค่าให้กับฟังก์ชั่นนั้นๆ จนครบตามจำนวนที่กำหนดไว้ ถ้าหากส่งค่าไม่ครบจะเกิดข้อผิด Warning: Missing argument ขึ้น หรือ ถ้าเราต้องการสร้างฟังก์ชั่นที่เรารู้ค่าที่ใช้คำนวนอยู่แล้ว เช่นฟังก์ชั่นที่คิดภาษีที่เรารู้อยู่แล้วว่าต้องคิดที่ 7% แต่ต้องการให้สามารถเปลี่ยนค่าได้โดยที่ไม่ต้องแก้ไขฟังก์ชั่นใหม่ ก็สามารถทำการกำหนดค่าเริ่มต้นขึ้นมาได้เลย ลองดูตัวอย่างกัน
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
    function cal_tax(&$cost, $tax = 0.07) {
        $cost += $cost * $tax;
    }
    $cost = $cost1 = 200;
    echo "จำนวนเงินก่อนคำนวนภาษี " . $cost;
    echo "<br />";
    cal_tax($cost);
    echo "จำนวนเงินหลังคำนวนภาษี " . $cost;
    echo "<hr />";
    echo "คิดภาษีที่ 10%";
    echo "<br />";
    echo "จำนวนเงินก่อนคำนวนภาษี " . $cost1;
    echo "<br />";
    cal_tax($cost1, 0.1);
    echo "จำนวนเงินหลังคำนวนภาษี " . $cost1;
    echo "<br />";
?>
จากตัวอย่าง ทำการผสมผสานกันระหว่างการเรียกฟังก์ชั่นโดยใช้อ้างอิงตำแหน่งตัวแปร กับการกำหนดค่าเริ่มต้นให้ฟังก์ชั่น จะเห็นได้ว่า เราเรียกฟังก์ชั่นครั้งแรกโดยไม่ส่งค่าไปแค่ตัวเดียวคือตำแหน่งของตัวแปร $cost เราได้ทำการกำหนดค่าเริ่มต้นให้ตัวแปร $tax แล้วทำให้ตัวแปร $tax มีค่า 0.07 ตามที่เรากำหนดไว้ แต่พอเรียกครั้งที่สองเราได้ส่งค่า 0.1 ให้กับตัวแปร $tax ด้วย ทำให้ค่าของตัวแปร $tax ถูกเปลี่ยนจาก 0.07 เป็น 0.1 แทน
2.4 การคืนค่าของฟังก์ชั่น
ในการสร้างฟังก์ชั่นขึ้นมาใช้งานนั้น ถ้าหากไม่มีการส่งค่ากลับคืนมาเมื่อทำงานเสร็จ ฟังก์ชั้นนั้นก็แทบจะไม่มีประโยชน์อะไรเลย เนื่องจากไม่สามารถนำค่าที่ฟังก์ชั่นคำนวนได้กลับมาใช้งาน การคืนค่าของฟังก์ชั่น สามารถทำได้โดยใช้คำสั่ง return โดยสามารถคืนค่าจากผลลัพธ์การคำนวนได้หนึ่งค่า หรือถ้าต้องการคืนหลายๆ ค่าพร้อมกัน สามารถใช้ตัวแปรแบบ array หรือ list ก็ได้ ลองดูตัวอย่างกันครับ
การคืนค่าหนึ่งค่า
1
2
3
4
5
6
7
8
9
10
11
12
<?php
    function cal_tax($cost, $tax = 0.07) {
        $cost += $cost * $tax;
        return $cost;
    }

    $cost = 200;
    echo "ค่าก่อนคำนวนภาษี " . $cost;
    $cost = cal_tax($cost);
    echo "<br />";
    echo "ค่าหลังคำนวนภาษี " . $cost;
?>
การเรียกใช้งานฟังก์ชั่นที่มีการคืนค่านั้น จำเป็นต้องมีตัวแปร หรือคำสั่งใดๆ รองรับการคืนค่านั้นๆ ไม่เช่นนั้นแล้ว ค่าที่คืนกลับมา ก็ไม่สามารถนำไปใช้งานใดๆ ได้เลย
การคืนค่าหลายค่า
การคืนค่าหลายๆ นั้น ต้องทำให้ตัวแปรนั้นเป็น array ก่อน โดยจะสร้างให้ตัวแปรนั้นเป็น array หรือใช้คำสั่ง list() ในการรับค่าก็ได้ ตัวอย่างการใช้ฟังก์ชั่น list()
1
2
3
4
5
<?php
    $color = array('red', 'green',' blue');
    list($red, $green, $blue) = $color;
    // ตัวแปร $red เก็บค่า red, $green เก็บค่า green, $blue เก็บค่า blue
?>
ตัวอย่างการใช้งานฟังก์ชั่นที่คืนค่าแบบ array
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
    function user() {
        $name[] = "POP EYE";
        $name[] = "shikimasan[a]gmail[dot]com";
        $name[] = "www.cmdevhub.com";
        return $name;
    }
    // รับค่าโดยใช้ฟังก์ชั่น list ต้องทำการสร้างตัวแปรรับค่าให้ตรงกับค่าที่คืนกลับมา
    list($name, $email, $web) = user();

    // รับค่าโดยใช้ตัวแปร ทำให้ตัวแปรนั้นถูกเปลี่ยนเป็นแบบ array โดยอัตโนมัติ
    $name = user();

    // การอ้างอิงค่าต้องทำการอ้างอิงจาก index ของ array โดยตรง
    echo $name[0];
    echo $name[1];
?>
จากตัวอย่างจะเห็นได้ว่าเราสามารถรับค่าจากฟังก์ชั่นที่คืนค่าเป็น array ได้ทั้ง 2 แบบ แต่ในการใช้งานจริงๆ จะใช้ฟังก์ชั่น list() รับค่ามากกว่า เพราะต้องกำหนดตัวแปรให้กับค่าที่คืนมาแต่ละค่า ซึ่งจะสื่อความหมายมากกว่ารับค่าโดยใช้ตัวแปรและอ้างอิงโดยใช้หมายเลข index อ้างอิง
2.5 ฟังก์ชั่นซ้อนฟังก์ชั้น (Nesting Function)
ในภาษา PHP เราสามารถสร้างฟังก์ชั่นขึ้นมาภายในฟังก์ชั่นอีกทีได้ แบบตัวอย่าง
1
2
3
4
5
6
7
8
9
10
11
12
<?php
    function cal_tax ($price, $tax) {
        function cal_vat ($total) {
            return $total * 0.07;
        }
        $price += $price * $tax;
        echo "จำนวนเงินทั้งหมดหลังรวมภาษี " . $price . " หลังรวมภาษีมูลค่าเพิ่ม " . ($price + cal_vat($price));
    }
    cal_tax(1500, 0.1); // ผลลัพธ์ 1650 , 1765.5
    echo "<br />";
    echo cal_vat(100);  // ผลลัพธ์ 7
?>
Nesting Function ของภาษา PHP ไม่มีการกำหนดระดับของการเข้าถึง (scope) ทำให้ไม่ว่าจะเขียนฟังก์ชั่นไว้ที่ไหน ก็สามารถเรียกใช้ได้ การเขียนแบบนี้ ไม่ค่อยได้ใช้ในชีวิตจริงเท่าไหร่ แต่ก็ให้รู้ไว้ว่าเราสามารถสร้างฟังก์ชั่นแบบนี้ได้ เผื่อเอาไปสอบ CERT นะครับ
2.6 ฟังก์ชั่นเรียกตัวเอง (Recursive Function)
ฟังก์ชั่นเรียกตัวเอง ใช้สำหรับทำงานซ้ำๆ กันโดยที่เราไม่รู้จำนวนรอบในการทำงาน โดยจะมีจุดสิ้นสุดการทำงานอยู่ในฟังก์ชั่นเองอยู่แล้ว เพื่อให้ฟังก์ชั่นหยุดการทำงาน การเขียนฟังก์ชั่นแบบเรียกตัวเอง จะลดระยะเวลาในการเขียนโปรแกรมไปได้อย่างมาก แต่ปัญหาคือการออกแบบและเขียนได้ยากมาก ทำให้ไม่ค่อยได้เห็นคนเขียนฟังก์ชั่นแบบนี้กันเท่าไหร่ เรามาดูตัวอย่างฟังก์ชั่นเรียกตัวเองที่เขียนกันบ่อยๆ 2 ตัวอย่างกัน
1
2
3
4
5
6
7
8
9
10
11
12
<?php
    function fibo($num) {
        if ($num == 1 || $num == 2) {
            return 1;
        }
        else {
            return fibo($num - 1) + fibo($num - 2);
        }
    }

    echo fibo(20);
?>
ตัวอย่างแรกเป็นตัวเลข Fibonacci การใช้งานคือ เรียกฟังก์ชั่น fibo() แล้วใส่ตัวเลขตำแหน่งหลักที่ต้องการเข้าไปเช่น fibo(20) หมายถึงตัวเลข fibonacci ในตำแหน่งที่ 20
1
2
3
4
5
6
7
8
9
10
11
12
<?php
    function fac($num) {
        if ($num == 0 || $num == 1) {
            return 1;
        }
        else {
            return fac($num - 1) * $num;
        }
    }

    echo fac(5);
?>
ตัวอย่างที่สองเป็นตัวเลข Factorial หรือ n! การทำงานก็คล้ายๆ กับ fibonacci แต่ผลลัพธ์ที่ได้จะเป็นค่าของ n! เลย
จะเห็นว่า ถ้าหากเราเขียนโปรแกรมแบบปกติ จะต้องมีการใช้คำสั่งวนรอบมาเกี่ยวข้อง แต่ถ้าใช้ฟังก์ชั่นเรียกตัวเองเราไม่ต้องใช้คำสั่งวนรอบเข้ามาเกี่ยวข้องกับการทำงานของฟังก์ชั่นเลย แต่จะต้องมีเงื่อนไขในการจบฟังก์ชั่นที่แน่นอนด้วย
ก็จบกันไปอีกแล้วกับฟังก์ชั่นในภาษา PHP บทนี้เขียนกันข้ามเดือนเลย เนื่องจากงานเยอะ (แต่มีเวลาเล่นเกม) ก็ต้องขออภัยเพื่อนๆ ที่รอกันอยู่นะครับ ตอนนี้ก็ปิดเทอมแล้ว ยังไงจะพยายามเขียนให้ได้มากที่สุดเท่าที่จะทำได้ แล้วเจอกันครับ