วันพฤหัสบดีที่ 18 ธันวาคม พ.ศ. 2557

ข้อสอบ O-net

ข้อสอบ O-net

1.ข้อใดคือคุรสมบัติพื้นฐานของข้อมูลที่ดีเพื่อนำมาใช้ในการประมวลผล
ในการใช้งานระบบสารสนเทศ.
1.  ความถุกต้อง  ความทันสมัย  ความกระชับ
2.  ความสมบูรณ์  ความถุกต้อง  ความกระชับ
3.  ความถูกต้อง  ความกระชับ  ความเป็นปัจจุบัน
4.  ความสมบูรณ์  ความถุกต้อง  ความหลากหลาย


2.อุปกรณ์ชนิดใดใช้เทคโนโลยีจานแสง(Optical Technology)
1.  เครื่องเล่นเทป                     2.  หน่วยขับซีดีรอม
3.  หน่วยความจำแบบแฟลช      4.  อุปกรณ์รับเข้าแบบจอสัมผัส


3.กระบวนงานในข้อใดเกิดขึ้นเป็นสิ่งแรกเมื่อเปิดเครื่องคอมพิวเตอร์.
1.  เช็คสถานของระบบปฏิบัติการ
2.เช็คสถานของแป้นพิมพ์ เมาส์และจอแสดงผล
3.  หน่วยประมวลผลกลางประมวลชุดคำสั่งในหน่วยความจำหลักแบบแก้ไขได้(RAM)
4.  หน่วยประมวลผลกลางประมวลชุดคำสั่งในหน่วยความจำหลักแบบอ่านได้อย่างเดียว

4.ข้อใดเป็นธุรกรรมทางการเงิน โดยผ่านเครือข่ายคอมพิวเตอร์

 1.    E-Mail                                                 
 2.    E-Banking
 3.    E-Exhibition                                      
      4.    E-Advertising

5.  ข้อใด ไม่ใช่ ระบบปฏิบัติการที่นำมาใช้บนอุปกรณ์พกพาประเภท Smartphone

 1.    Ubuntu                                                 2.    Android
 3.    Symbian                                               4.    iPhone OS

6.ข้อใดเป็นการนำระบบสารสนเทศและการสื่อสารข้อมูลมาใช้ในงานที่ให้ผลตอบแทนน้อยที่สุด

1.ใช้ทำบัญชีรายรับรายจ่ายส่วนบุคคล
2.ใช้ในการปลูกผักในแปลงเกษตรโรงเรียน
3.ใช้ในการควบคุมการผลิตผลไม้กระป่องส่งออก
4.ใช้ในการควบคุมการผลิตและจำหน่ายชิ้นส่วนรถยนต์ของโรงงาน




7.ชื่อของเว็บไซต์ที่ลงท้ายด้วย .ac.th ตรงกับข้อใด

1             1.เป็นเว็บไซต์ที่เป็นหน่วยงานเอกชน
2            2. เป็นเว็บไซต์ที่เกี่ยวกับการศึกษาประเทศไทย
3            3. เป็นเว็บไซต์ที่เกี่ยวกับองค์กรของรัฐในประเทศไทย
4            4. เป็นเว็บไซต์ที่เกี่ยวกับผู้ให้บริการเครือข่ายในประเทศไทย


8.ในปัจจุบันเครื่องรับโทรทัศน์ที่ใช้เทคโนโลยีใหม่ที่มีความบางและความคมชัดสูงที่สุด เป็นจอแสดงภาพชนิดใด

 1.    CRT                                                      2.    LCD
 3.    LED                                                      4.    PLASMA


9.หากครูต้องการบันทึกและวิเคราะห์คะแนนของนักเรียน แล้วแสดงข้อมูลสรุปในรูปแบบของแผนภูมิ ครูควรเลือกใช้ซอฟต์แวร์ใด

 1.    ซอฟต์แวร์นำเสนอ                            
 2.    ซอฟต์แวร์ฐานข้อมูล
 3.    ซอฟต์แวร์ประมวลคำ                       
 4.    ซอฟต์แวร์ตารางทำงาน


10.ความละเอียดของจอภาพสามารถบอกได้ด้วยปัจจัยในข้อใด


1.CRT
2.Dot pitch
3.Refresh rate
4.Color quality




ที่มา    http://www.trueplookpanya.com/examination/display/10216

คำสั่ง SQL


   
1.SQL SELECT
เป็นคำสั่งที่ใช้สำหรับการเรียกดูข้อมูลในตาราง (Table) คำสั่ง SQL SELECT สามารถเรียกได้ทั้งตาราง หรือว่า สามารถระบุฟิวด์ที่ต้องการเรียกดูข้อมูลได้

Database : MySQL,Microsoft Access,SQL Server,Oracle

Syntax

SELECT Column1, Column2, Column3,... FROM [Table-Name]


Table : customer


CustomerID
Name
Email
CountryCode
Budget
Used
C001
Win Weerachaiwin.weerachai@thaicreate.com
TH
1000000600000
C002
John Smithjohn.smith@thaicreate.com
EN
2000000800000
C003
Jame Bornjame.born@thaicreate.com
US
3000000600000
C004
Chalee Angelchalee.angel@thaicreate.com
US
4000000100000


Sample1 การเลือกข้อมูลที่ระบุฟิวด์

SELECT CustomerID, Name, Email FROM customer

Output

CustomerID
Name
Email
C001
Win Weerachaiwin.weerachai@thaicreate.com
C002
John Smithjohn.smith@thaicreate.com
C003
Jame Bornjame.born@thaicreate.com
C004
Chalee Angelchalee.angel@thaicreate.com



Sample2 การเลือกข้อมูลทั้งหมดของ Table

SELECT * FROM customer

Output

CustomerID
Name
Email
CountryCode
Budget
Used
C001
Win Weerachaiwin.weerachai@thaicreate.com
TH
1000000600000
C002
John Smithjohn.smith@thaicreate.com
EN
2000000800000
C003
Jame Bornjame.smith@thaicreate.com
US
3000000600000
C004
Chalee Angelchalee.angel@thaicreate.com
US
4000000100000




2.SQL WHERE 
เป็นคำสั่งที่ใช้สำหรับการระบุเงื่อนไขการเลือกข้อมูลในตาราง (Table) คำสั่ง SQL WHERE สามารถระบุเงื่อนไขในการเลือกข้อมูลได้ 1 เงื่อนไข หรือมากกว่า 1 เงื่อนไข

Database : MySQL,Microsoft Access,SQL Server,Oracle

Syntax

SELECT Column1, Column2, Column3,... FROM Table-Name WHERE [Field] = 'Value'


Table : customer
CustomerID
Name
Email
CountryCode
Budget
Used
C001
Win Weerachaiwin.weerachai@thaicreate.com
TH
1000000600000
C002
John Smithjohn.smith@thaicreate.com
EN
2000000800000
C003
Jame Bornjame.born@thaicreate.com
US
3000000600000
C004
Chalee Angelchalee.angel@thaicreate.com
US
4000000100000


Sample1 การเลือกข้อมูลโดยใช้ Operators = (เท่ากับ) 

SELECT * FROM customer WHERE CountryCode = 'US'
หรือ แบบ 2 เงื่อนไข ใช้ and เข้ามาเชื่อม วลี
SELECT * FROM customer WHERE CountryCode = 'US' and Budget = '4000000'

Output 

CustomerID
Name
Email
CountryCode
Budget
Used
C003
Jame Bornjame.smith@thaicreate.com
US
3000000600000
C004
Chalee Angelchalee.angel@thaicreate.com
US
4000000100000

CustomerID
Name
Email
CountryCode
Budget
Used
C004
Chalee Angelchalee.angel@thaicreate.com
US
4000000100000


3.SQL ALIAS 
เป็นคำสั่งที่ใช้สำหรับการระบุเงื่อนไขการเลือกข้อมูลในตาราง (Table) โดย ALIAS คือการสร้างชื่อจำลองขึ้นมาใหม่ โดยสามารถจำลองชื่อได้ทั้งชื่อ Field และชื่อ Table 

Database : MySQL 

Syntax

SELECT Column1 AS Alias1,Column2 AS Alias2,Column3 AS Alias3,... FROM [Table-Name1] Table Alias


Table : customer
CustomerID
Name
Email
CountryCode
Budget
Used
C001
Win Weerachaiwin.weerachai@thaicreate.com
TH
1000000600000
C002
John Smithjohn.smith@thaicreate.com
EN
2000000800000
C003
Jame Bornjame.born@thaicreate.com
US
3000000600000
C004
Chalee Angelchalee.angel@thaicreate.com
US
4000000100000

4.SQL ORDER BY 
เป็นคำสั่งที่ใช้สำหรับการระบุเงื่อนไขการเลือกข้อมูลในตาราง (Table) โดยจัดเรียงข้อมูลตามต้องการ

Database : MySQL,Microsoft Access,SQL Server,Oracle

Syntax

SELECT Culumn1,Culumn2,Culumn3,... FROM [Table-Name] ORDER BY [Field] [ASC/DESC],[Field] [ASC/DESC],...
ASC = น้อยไปหามาก
DESC = มากไปหาน้อย


Table : customer
CustomerID
Name
Email
CountryCode
Budget
Used
C001
Win Weerachaiwin.weerachai@thaicreate.com
TH
1000000600000
C002
John Smithjohn.smith@thaicreate.com
EN
2000000800000
C003
Jame Bornjame.born@thaicreate.com
US
3000000600000
C004
Chalee Angelchalee.angel@thaicreate.com
US
4000000100000

5.SQL BETWEEN 
เป็นคำสั่งที่ใช้สำหรับการระบุเงื่อนไขการเลือกข้อมูลในตาราง (Table) โดยทำการเลือกเงื่อนไขที่อยู่ระหว่างค่าเริ่มต้นและค่าสิ้นสุด

Database : MySQL,Microsoft Access,SQL Server,Oracle

Syntax

SELECT Column1,Column2,Column3,... FROM [Table-Name] WHERE [Field] BETWEEN [Value-Start] AND [Value-End]


6.SQL OR AND 
เป็นคำสั่งที่ใช้สำหรับการระบุเงื่อนไขการเลือกข้อมูลในตาราง (Table) การเชื่อมวลีสำหรับเงื่อนไขต่าง ๆ 

Database : MySQL,Microsoft Access,SQL Server,Oracle

Syntax

SELECT Column1,Column2,Column3,... FROM [Table-Name] WHERE [Field] = 'Value' [AND/OR] [Field] = 'Value'



7.SQL DISTINCT
เป็นคำสั่งที่ใช้สำหรับการระบุเงื่อนไขการเลือกข้อมูลในตาราง (Table) โดยทำการเลือกข้อมูลที่ซ้ำกันมาเพียงแค่ Record เดียว 

Database : MySQL,Microsoft Access,SQL Server,Oracle

Syntax

SELECT DISTINCT Column1,Column2,Column3,... FROM [Table-Name]



8.SQL RAND 
เป็นคำสั่งที่ใช้สำหรับการระบุเงื่อนไขการเลือกข้อมูลในตาราง (Table) ในรูปแบบของการสุ่ม Record 

Database : MySQL 

Syntax

SELECT Column1, Column2, Column3,... FROM [Table-Name] ORDER BY RAND() LIMIT [Int]


Table : customer
CustomerID
Name
Email
CountryCode
Budget
Used
C001
Win Weerachaiwin.weerachai@thaicreate.com
TH
1000000600000
C002
John Smithjohn.smith@thaicreate.com
EN
2000000800000
C003
Jame Bornjame.born@thaicreate.com
US
3000000600000
C004
Chalee Angelchalee.angel@thaicreate.com
US
4000000100000
.

9.SQL GROUP BY 
เป็นคำสั่งที่ใช้สำหรับการระบุเงื่อนไขการเลือกข้อมูลในตาราง (Table) โดยใช้หาผลรวมของคอลัมน์จากแถวใน Column ที่ระบุและทำการรวม Group ภายใต้ Column ที่อยู่หลัง GROUP BY 

Database : MySQL,Microsoft Access,SQL Server,Oracle

Syntax

SELECT Column,SUM(Column) FROM [Table-Name] GROUP BY Column




10.SQL SUM 
เป็นคำสั่งที่ใช้สำหรับการระบุเงื่อนไขการเลือกข้อมูลในตาราง (Table) โดยหาค่าผลรวมของฟิวด์

Database : MySQL,Microsoft Access,SQL Server,Oracle

Syntax

SELECT SUM(Column/Field) AS [New-Field] FROM [Table-Name]



Cr.http://www.thaicreate.com/tutorial/sql.html

วันพฤหัสบดีที่ 27 พฤศจิกายน พ.ศ. 2557

ฟังก์ชันที่มีประโยชน์

ฟังก์ชันที่มีประโยชน์

PHP มีฟังก์ชันภายในที่ทำงานกับข้อความและการแสดงผล ในเบื้องต้นจะแนะนำบางฟังก์ชันที่มีประโยชน์

nl2br

ถ้าสังเกตให้ดีจะพบว่าข้อความที่มีการเว้นบรรทัดนั้น เมื่อแสดงผลด้วย HTML จะไม่ขึ้นบรรทัดใหม่ใน browser ของผู้ใช้ เนื่องจากการตัด whitespace ดังนั้นการแสดงผลให้เว้นบรรทัด ให้เรียกฟังก์ชัน nl2br() ที่จะแปลงตัวอักษรบรรทัดใหม่ให้เป็น </br> tag ตามสคริปต์นี้

<?php

$stringval =<<<NLSTRING

นี่เป็นตัวอย่างข้อความที่
ประกอบด้วยการขึ้นบรรทัดใหม่
และต้องการดูผลลัพธ์
ให้เหมือนกับข้อความต้นทางนี้

NLSTRING;
                  echo nl2br($stringval);
?>
ผลลัพธ์คือ
นี่เป็นตัวอย่างข้อความที่
ประกอบด้วยการขึ้นบรรทัดใหม่
และต้องการดูผลลัพธ์
ให้เหมือนกับข้อความต้นทางนี้

var_dump

มีบ่อยครั้งที่อาจจะมีการทดลองหรือเขียนโปรแกรม และมีความต้องการดูเนื้อหา รวมทั้งธรรมชาติแบบไดนามิคส์และไม่มีการประกาศประเภทข้อมูลให้ตัวแปรอย่างชัดเจน หมายความว่าจะไม่ทราบประเภทข้อมูลปัจจุบันที่แน่นอน ฟังก์ชัน var_dump แสดงประเภทและค่าของตัวแปรในผลลัพธ์ สำหรับข้อความ var_dump ให้จำนวนตัวอักษรในข้อความ

<?php

$floatval = 123e-456;
$intvar = 123456;
$stringval = "Hello world";

var_dump($floatval);      echo "<br/>\n";
var_dump($intvar);        echo "<br/>\n";
var_dump($stringval);    echo "<br/>\n";
?>
ผลลัพธ์จากคำสั่งข้างบนคือ
float(0)
int(123456)
string(10) “Hello world”

print_r

ฟังก์ชัน print_r คล้ายกับ var_dump แต่สร้างผลลัพธ์ที่อ่านได้ง่าย print_r  ให้มีการเพิ่มค่าตัวเลือก(เรียกว่า พารามิเตอร์) ที่บอกให้ฟังก์ชันนี้ส่งออกผลลัพธ์เป็นข้อความแทนที่การส่งผลลัพธ์ออกไป

<?php

$stringval = "เรายินดีให้บริการสินค้าหัตถกรรมฝีมือปราณีต";

print_r ($stringval);    echo "<br/>\n";
$result = print_r ($stringval, TRUE);
echo $result;

?>
ผลลัพธ์จากคำสั่งข้างบนคือ
เรายินดีให้บริการสินค้าหัตถกรรมฝีมือปราณีต
เรายินดีให้บริการสินค้าหัตถกรรมฝีมือปราณีต

var_export

ฟังก์ชันแสดงผลสุดท้ายคือ ฟังก์ชัน var_export ที่คล้ายกับ var_dump มาก ยกเว้นผลลัพธ์ได้รับการนำเสนอค่าของข้อมูลแบบคำสั่ง PHP               

<?php

$arr = array(1, 2, 3, 4);
var_export($arr);

?>
ผลลัพธ์จากคำสั่งข้างบนคือ
array( 0 => 1, 1 => 2, 2 => 3, 3 => 4)

Quoted

ในการเขียนคำสั่งข้อความโดยเฉพาะคำสั่ง echo การใช้ quoted จะสร้างความสับสนให้กับตัวกระจาย PHP ได้ เช่น
echo "<td width="15%">";
คำสั่งนี้สร้างความผิดพลาด ดังนั้นต้องใช้ quoted ต่างกัน
echo "<td width='15%'>";
หรือ
echo '<td width="15%">';
ในการเขียนประโยคคำสั่งคิวรี่ การใช้ quoted ภายในประโยคคำสั่งจะทำตัวกระจาย MySQL เกิดความสับสน
INSERT INTO message VALUES("การสัมนาเรื่อง "การดูแลสุขภาพ" เริ่มเวลา 16.00 ");
การคำสั่งต้องใช้ slash (\) กับ quoted ที่ไม่ใช้ส่วนการห้อหุ้ม
INSERT INTO message VALUES("การสัมนาเรื่อง \"การดูแลสุขภาพ\" เริ่มเวลา 16.00 ");

การเพิ่มเนื้อหาแบบไดนามิคส์

การเพิ่มเนื้อหาแบบไดนามิคส์

เหตุผลหลักในการใช้สคริปต์ด้านแม่ข่าย คือ ความสามารถในการให้เนื้อหาแบบไดนามิคส์ไปยังผู้ใช้ บทบาทที่สำคัญของการประยุกต์เพราะเนื้อหาเปลี่ยนตามความต้องการของผู้ใช้ หรือตลอดเวลา  PHP ช่วยให้ทำงานลักษณะนี้ได้ง่าย ขอเริ่มต้นด้วยตัวอย่างง่าย ๆ แทนที่ PHP ใน processorder.php ด้วยคำสั่งต่อไปนี้
                       
                <?
                        echo "<p>เวลาประมวลผลใบสั่งซื้อ";
                        echo date("H:i, jS F");
                        echo "</p>";
                ?>
ในคำสั่งนี้ใช้ฟังก์ชัน  date () ของ PHP เพื่อบอกวันที่และเวลาประมวลผลใบสั่งซื้อ ที่จะต่างกันในการทำงานของสคริปต์แต่ละครั้ง ผลลัพธ์ของการเรียกสคริปต์ ดูจากภาพ  1.1.2

ภาพ 1.1.2 ฟังก์ชัน date() ส่งออกรูปแบบวันที่

การเรียกฟังก์ชัน

ให้ดูการเรียก  date() นี่คือรูปแบบทั่วไปในการเรียกฟังก์ชัน  PHP  มี ไลบรารีของฟังก์ชันให้ใช้พัฒนาโปรแกรมประยุกต์เว็บ
date("H=i,jsF")

สังเกตว่ามีการส่งผ่านข้อมูลที่เป็นข้อความ ให้กับฟังก์ชันภายในวงเล็บ ข้อความที่ส่งผ่านเรียกว่า อากิวเมนต์หรือพารามิเตอร์ของฟังก์ชัน  อากิวเมนต์เหล่านี้คือ การนำเข้าโดยฟังก์ชันเพื่อให้ผลลัพธ์ที่ต้องการฟังก์ชัน  date()

การต่อข้อความ

การต่อข้อความใช้ จุด (.) ตัวอย่างเช่น
echo   $soapqty." ก้อน <br/>";
อีกวิธีหนึ่ง  คือ
echo   "$soapqty  ก้อน <br>";

การกำหนดค่าให้กับตัวแปร

ตัวแปร PHP ไม่ต้องประกาศก่อนการใช้ ซึ่งเป็นความแตกต่างของ PHP จากภาษาอื่น ซึ่งตัวแปรใน PHP แสดงโดยเครื่องหมายดอลลาร์ ($) ตามด้วยชื่อตัวแปรที่เริ่มต้นด้วยตัวอักษรหรือเส้นใต้ (underscore) จากนั้นจึงตามด้วยตัวอักษร เส้นใต้ หรือตัวเลข รวมถึงชุดตัวอักษรส่วนขยายบางส่วน เช่น ลาติน ไทย สำหรับตัวอักษรส่วนขยายอื่น เช่น พยัญชนะ จีนและญี่ปุ่น ยังไม่ยอมรับ
<?php
$varname = "varname";       // ok
$var____Name = "oink";      // ok
$__45var = 45;         // ok
$กิน = "กิน";                 // ok
$45__var = 45;         // ไม่ได้ – ขึ้นต้นตัวเลข
// ตัวอักษรจีนและญี่ปุ่นไม่สามารถเป็นชื่อตัวแปร

ประเภทข้อมูล

ประเภทข้อมูล

การทำงานกับประเภทข้อมูลของ PHP แตกต่างจากภาษาอื่นเล็กน้อย โดย PHP เป็นภาษา richly typed ที่ตัวแปรไม่ต้องมีการประกาศเป็นประเภทข้อมูลเจาะจง เพราะ engine กำหนดประเภทที่ใช้ตามกฎ บางครั้งเรียกสิ่งนี้ว่าประเภทข้อมูลไดนามิคส์  
PHP สนับสนุนประเภทข้อมูล
  1. integer
  2. float หรือ double
  3. string
  4. boolean
  5. array
  6. object

Integer

integer คือจำนวนเต็ม ตามปกติความแม่นยำขึ้นกับระบบปฏิบัติการ ส่วนใหญ่เป็นขนาด 32 บิต ใน PHP ไม่มี unsigned integer ดังนั้นค่ามากที่สุดของจำนวนเต็มคือ 2 พันล้าน เมื่อเกินจำนวนมากที่สุดของ integer ใน PHP จะแปลงไปเป็น float แทนที่จะไปเป็นจำนวนเต็มลบเหมือนภาษาอื่น
<?php
$large = 2147483647;
var_dump($large);
$large = $large + 1;
var_dump($large);
?>
ผลลัพธ์ คือ
Int(2147483647)                  float(2147483648)
integer ระบุในคำสั่งเป็นระบบเลขฐาน 8, ฐาน 10 หรือ ฐาน 16 ได้
การหารเลขจำนวนเต็มใน PHP จะไม่ให้ผลลัพธ์เป็นจำนวนเต็ม เช่น นิพจน์
5 / 2
PHP มีผลลัพธ์คือ 2.5 ด้วยประเภทข้อมูล float แทนที่จะเป็นจำนวนเต็ม 2 เหมือนกับภาษาอื่น ถ้าต้องการค่าจำนวนเต็มจากการหาร ต้องมีการแปลงค่าเป็นจำนวนเต็ม หรือใช้ฟังก์ชัน round

Float

float คือจำนวนทศนิยมหรือจำนวนจริง มีขนาด 64 บิตด้วยความแม่นยำของทศนิยม 14 ตำแหน่ง PHP ไม่ได้แบ่งออกเป็น single และ double ตามความแม่นยำเหมือนกับภาษาอื่น อย่างไรก็ตาม PHP ยอมรับคีย์เวิร์ด double เพิ่มเติมจาก float ที่มีความหมายตรงกัน
<?php
$floatvar1 = 8.457; 
$floatvar2 = 5.23e3; // เหมือนกับ 5230.0
$floatvar3 = 7.2e+4; // เหมือนกับ 72000.0
$floatvar4 = 1.234e-4;// เหมือนกับ 0.0001234
$floatvar5 = 100000000000;// ใหญ่เกินไปสำหรับ integer แปลงเป็น float
?>
ข้อควรระวัง      สำหรับ float ควรระวังความจำกัดด้านความแม่นยำ การคำนวณที่ต้องการความแม่นยำสูงอาจจะมีปัญหาได้ แต่การประยุกต์ทั่วไปควรจะเพียงพอ

String

string เป็นชุดของตัวอักษร ใน PHP ตัวอักษรมีค่า 8 บิต
ค่า string ระบุได้ 3 วิธี

Single Quoted

ข้อความ single quoted เป็นชุดตัวอักษรที่เริ่มต้นและปิดท้ายด้วย single quote(‘)
echo 'ข้อความ single quote';
ในการรวม single quote ภายในข้อความให้วาง backslash (\) ด้านหน้า ที่เรียกว่าตัวอักษร escape
echo 'การแสดง single quote \' ';

Double Quoted

ข้อความ double quoted คล้ายกับข้อความ single quoted ยกเว้น ตัวประมวลผลภาษา PHP ตัดสิ่งเหล่านี้เพื่อค้นหาและแทนที่ ชุดตัวอักษร escape และตัวแปร
นอกจากนี้ตัวอักษร escape \" ต้องการแทรก double quote ภายในข้อความ double quoted ต่อไปเป็นชุด escape ที่ PHP รู้จัก
ตาราง 1.2.1 escape
Escapeผลลัพธ์
\nตัวอักษรขึ้นบรรทัดใหม่ (char(10) หรือ 0x0a/10 ใน ASCII)
\rตัวอักษร Carriage return (char(13) หรือ 0x0a/13 ใน ASCII)
\tตัวอักษรแท็บ
\\ตัวอักษร backslash
\$ตัวอักษรดอลลาร์
\0ตัวเลขฐานแปดตัวอักษรที่แสดงโดยค่าในช่วง 0-255 ด้วยการระบุเป็นเลขฐานแปด
\xตัวเลขฐานสิบตัวอักษรที่แสดงโดยค่าในช่วง 0-255 ด้วยการระบุเป็นเลขฐานสิบ
PHP ไม่สนับสนุนตัวอักษร escape อื่น และถ้าไม่ตรงกับชุดตัวอักษรตามตาราง 1.1 จะพิมพ์ backslash และตัวอักษรนั้น
<?php
echo "ข้อความ double quote ";
echo "<br/>";
echo "แสดงผล double quote \" - \" ";
echo "<br/>";
echo "แสดงผล double quote \042 - \042 ";
echo "<br/>";
echo "แสดงผล backslash และ ก \ก ";
echo "<br/>";
?>

Heredoc Notation

วิธีที่ 3 สำหรับข้อความนำส่วนหัวในสคริปต์ PHP คือใช้ไวยากรณ์ heredoc ไวยากรณ์นี้เหมือนกับสคริปต์ PERL และ Bourne Shell ข้อความเริ่มต้นด้วย <<< และ identifier จนกระทั้งสิ้นสุดด้วย identifier วางชิดซ้ายและ semicolon (;)
<?php
      echo <<<TITLE
<h1 align="center">แสดงข้อความด้วย Heredoc</h1>
<p>การแสดงข้อความด้วย heredoc

สามารถทำงานกับข้อความได้สะดวก <br/>
การเว้นบรรทัดใช้ br tag <br/>
</p>
TITLE;
?>
ห้ามวางเครื่องหมายต่าง เช่น จุด คูณ บวก ติดกับ identifier จะมีผลต่อการกระจายของ PHP

Boolean

boolean เป็นประเภทข้อมูลง่ายที่สุดใน PHP และ แสดงเป็นค่าไบนารี TRUE หรือ FALSE, YES หรือ NO,1 หรือ 0 ค่าของตัวแปร boolean สามารถเป็นได้ทั้ง TRUE หรือ FALSE   2 คีย์เวิร์ดที่ตัวพิมพ์ไม่มีผล
<?php
$bln1 = tREu;
$bln2 = TrUE;
$bln3 = fAlsE;
$bln4 = FaLSe;
?>

Array

array เป็นวิธีความสามารถสูงในการจัดกลุ่มข้อมูลด้วยวิธียืดหยุ่นในการเข้าถึง การใช้ array สามารถใช้เป็นตัวเลขอย่างง่าย หรือการจับคู่อย่างยืดหยุ่นด้วยการเข้าถึงค่าผ่าน คีย์ประเภทหลังเรียกว่า  associative array
การประกาศ array ใช้เมธอด array เพื่อการสร้างค่าเริ่มต้นและส่งอ๊อบเจค array ที่เก็บค่าเหล่านี้
<?php
$peripheral = array("Laser Print", "Inkjet", "Modem", "CD-ROM");
$prime = array(1, 2, 3, 5, 7, 11, 13, 17);
$mixed = array(234.22, "คอมพิวเตอร์", 45, array(4, 6, 8), TRUE);
?>
ตามค่าเริ่มต้น ค่าภายใน array ได้รับการกำหนดเป็นดัชนีที่เริ่มต้นจาก 0 ในการเพิ่มหน่วยข้อมูลใหม่ด้วยไวยากรณ์นี้
<?php
$peripheral[ ] = "LAN Card";             // หน่วยข้อมูลเพิ่มใหม่ที่ดัชนี 4
$peripheral[ ] = "VGA Card";             // หน่วยข้อมูลเพิ่มใหม่ที่ดัชนี 5
?>
รวมทั้งสามารถระบุดัชนีของรายการเพิ่มใหม่ ถ้าใหญ่กว่าดัชนีสุดท้ายใน array จะมีช่องว่างลำดับตัวเลข
<?php
$peripheral[45] = "CD Writer";
?>
การเข้าถึงหน่วยข้อมูลใน array สามารถทำโดยการให้ตัวเลขดัชนีในวงเล็บสี่เหลี่ยม
<?php
echo $peripheral[2];             // พิมพ์ผล Modem
?>
การระบุค่าด้วยข้อความแทนที่ตัวเลขเริ่มต้น การกำหนดระบุคู่ คีย์-ค่า ด้วย => operator เมื่อสร้าง array
<?php
$developer = array("software" => "PHP", "website" => "www.php.net",
"database" => "MySQL", "decription" => "Web Developer");
echo $developer["website"]               // พิมพ์ผล www.php.net
?>
array เป็นเครื่องมือที่สำคัญใน PHP ดูเพิ่มเติมได้ในบทที่ 4 "การทำงานกับ Array"

Object

เมื่อ PHP สนับบสนุน object-oriented programming ในเวอร์ชันนี้มีการปรับปรุงและบางสิ่งอาจจะมากกว่าภาษาอื่น โดยย่อ object-oriented programming คือการใช้ประเภทข้อมูลใหม่ (เรียกว่า “object” หรือ “class”) ดังนั้นแทนที่การใช้ชุดของฟังก์ชัน แต่สามารถใช้เมธอดและตัวแปรกับข้อมูลโดยตรง ดูเพิ่มเติมบทที่ 7 “Object Oriented Programming”
การเข้าถึงตัวแปรหรือเมธอดบนอ๊อบเจค ใช้ -> operator ใน PHP ถ้ามี Rectangular class อ่านค่าความกว้าง (width) ความยาว (length) และเมธอดคำนวณพื้นที่ คำสั่งสามารถเขียนได้ดังนี้
<?php
$shape = new Rectangular ();
$shape->width = 20;
$shape->length = 30;
echo "พื้นที่สี่เหลี่ยม คือ: ".$shape->calculateArea();
?>

Variable Expansion

ตามที่ได้กล่าวถึงข้อความ double quoted และ heredoc ใน PHP สามารถเก็บการอ้างอิงตัวแปรด้วยเครื่องหมาย  $ และ engine จะทราบว่าต้องทำอะไร
Variable Expansion ใน PHP เป็นส่วนการทำงานความสามารถสูงที่ให้ด้านความเร็วและการผสมเนื้อหากับโปรแกรม มี 2 วิธีในการใช้ส่วนการทำงานนี้คือ แบบง่ายและแบบซับซ้อน แบบแรกสำหรับการตัวแปร ค่า array หรือคุณสมบัติอ๊อบเจค ขณะที่แบบหลังสำหรับส่วนขยายแม่นยำมากกว่า
ตัวอย่างแบบง่าย

<?php
$type = "simple";
echo "นี่เป็นตัวอย่างของส่วนขยาย '$type' ";
$type = array("แบบง่าย", "แบบซับซ้อน");
echo<<<THE_END
 เช่นกัน นี่เป็นตัวอย่างของส่วนขยาย array '$type[0]'
THE_END;
?>
เมื่อ PHP processor เห็น $ ในข้อความ double quoted หรือ heredoc จะอ่านตัวอักษรทั้งหมดจนสิ้นสุดชื่อตัวแปร, ดัชนีของ array หรือคุณสมบัติอ๊อบเจค จากนั้นจะประเมินผลลัพธ์และวางค่าในข้อความผลลัพธ์
ตามตัวอย่าง ถ้าไม่ใส่ single quoted (‘) ล้อมตัวแปร $type ไว้ PHP จะแสดงผลลัพธ์เป็นความผิดพลาด
การแก้ปัญหานี้สามารถใช้ส่วนขยายตัวแปรแบบซับซ้อน การใช้ให้หุ้มส่วนขยายด้วยวงเล็บปีก { } ในคำสั่ง PHP processor มองหาวงเล็บปีกกาทันทีต่อจาก $ ที่ระบุแหล่งส่วนขยายตัวแปร กรณีอื่นแสดงผลวงเล็บปีกและสิ่งที่ติดตามมา

<?php
$hour = 16;
$kilometres = 4;
$content = "ลูกอม";
echo "   4pm ในเวลา 24 ชั่วโมง คือ  {$hour}00 นาฬิกา<br/>\n";
echo <<<MSG
ระยะทาง {$kilometres}000 เมตร เท่ากับ {$kilometres} กม.<br/>
กระปุกอยู่ที่นี่ และเต็มไปด้วย${content}<br/>
MSG;
?>
ถ้าต้องการมีตัวอักษร {$ ในผลลัพธ์ จะต้อง escape เป็น {\$

คำสั่งใช้ใหม่

คำสั่งใช้ใหม่

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

การจัดกลุ่มคำสั่งเข้าสู่ไฟล์

ขั้นตอนแรกในการใช้คำสั่งใหม่คือ กำหนดปัจจัยในพิจารณาเลือกสิ่งที่ควรรวมและแยก มีข้อพิจารณา

จัดกลุ่มการทำงานร่วม

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

ทำให้การอินเตอร์เฟซแน่นอน

การเขียนคำสั่งกับการทำงานประเภทคล้ายกันควรเขียนคำสั่งแบบเดียวกัน เช่น การคำนวณเกี่ยวกับสี่เหลี่ยม
<?php
function rectangular_compute_area($side)
{
return $side['width'] * $side['length'];
}
function rectangular_modify_side(&$side, $diffwidth, $difflegth, $add=FALSE)
{
if ($add = TRUE)
{
$side['width'] += $diffwidth;
$side['length'] += $difflegth;
}
else
{
$side['width'] -= $diffwidth;
$side['length'] -= $difflegth;
}
}
?>

การเลือกชื่อไฟล์และตำแหน่ง

เมื่อจัดการแบ่งคำสั่งออกเป็นไฟล์ต่างหากแล้ว ต้องมีการเลือกชื่อและตำแหน่ง การตั้งชื่อไฟล์สคริปต์ไลบรารีนี้สามารถตั้งชื่อด้วยนามสกุล .php แต่อาจจะนำไปสู่ความเข้าใจผิดเล็กน้อย ประการแรกไม่สามารถสื่อถึงการใช้เป็นไลบรารีของคำสั่งสำหรับสคริปต์ PHP ประการต่อมาไม่มีสิ่งใดป้องกันบุคคลอื่นจากความพยายามที่เรียกใช้สคริปต์ใน browser
ดังนั้น ควรเลือกนามสกุล เช่น .inc หรือ .lib การใช้นามสกุล .inc ไม่มีข้อเสียเปรียบ เนื่องจาก browser ไม่ทราบว่าไฟล์นามสกุลนี้เป็นสคริปต์ PHP แต่ถ้าผู้ใช้เปิดดูจะคำสั่งภายในสคริปต์ตามภาพ 1.6.1

ภาพ 1.6.1 การเปิดดูไฟล์นามสกุล .inc บน browser
กลไกการป้องกันเข้าถึงไฟล์ไลบรารีเหล่านี้มี 2 แบบ กลไกแรกทำให้มั่นใจว่าไม่อนุญาตให้บุคคลทั่วไปเข้ามาดูและโหลดไฟล์ในไดเรคทอรีภายในโครงสร้างเอกสารเหล่านั้น กลไกที่ 2 ป้องกันโดยวางคำสั่งไลบรารีนอกโครงสร้างเอกสาร และอ้างอิงเชิงประจักษ์ไปยังไดเรคทอรีนั้นหรือบอกให้ PHP มองหา
ใน Microsoft Internet Information (IIS) มีโครสร้างเอกสารเป็น
C:\WebApplications\WWW
หรือใน Unix ( Linux, FreeBSD, Solaris และอื่นๆ) เรียกใช้ httpd ใน
/home/www
ไฟล์ไลบรารีสามารถใน
C:\WebApplications\Lib
หรือ
/home/lib
ไดเรคทอรีเหล่านี้ผู้ใช้ทั่วไปไม่สามารถเข้าถึงและไม่ต้องกังวลกับการดูไฟล์จากบุคคลอื่น

การรวมไฟล์ไลบรารีในสคริปต์

PHP มีวิธีการหลักในการรวมไฟล์ในสคริปต์

การใช้ require () และ include ()

PHP ให้ 2 วิธีอย่างง่าย เป็นประโยคคำสั่งที่ยอมใช้คำสั่งใหม่คือ ประโยคคำสั่ง require () หรือ include () ทำให้สามารถโหลดไฟล์เข้าสู่สคริปต์ PHP ไฟล์นั้นสามารถเก็บทุกอย่างที่พิมพ์อย่างปกติในสคริปต์ รวมถึงประโยคคำสั่ง PHP ข้อความ HTML tag ฟังก์ชัน PHP และ PHP class
ประโยคคำสั่งเหล่านี้ทำงานคล้ายกับ Server Side Include ที่มีให้โดยแม่ข่ายเว็บส่วนมากและประโยคคำสั่ง #include ใน C หรือ C++

การใช้ require ()

คำสั่งต่อไปนี้เก็บอยู่ในไฟล์ welcome.inc
<p align="center">
<?php
echo "<h1>Welcome to web development with PHP</h1>";
?>
</p>
คำสั่งต่อไปนี้เก็บอยู่ในไฟล์ main.php
<html>
<head>
<title>File Include Sample</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-11">
</head>
<body>
<?php
echo "<b> นี่เป็นหน้าหลัก </b><br/>";
require("welcome.inc");
echo "<b> จบสคริปต์ </b><br/>";
?>
</body>
</html>
ถ้าโหลด reuse.php แล้วจะไม่แปลกใจ เมื่อปรากฏ “ นี่คือประโยคคำสั่ง PHP อย่างง่าย ” บน browser ถ้าโหลด main.php
ไฟล์ต้องใช้ประโยคคำสั่ง require () ในตัวอย่างก่อนกำลังใช้ไฟล์ชื่อ welcome.inc จะเขียนดังนี้
require("welcome.inc");
PHP ไม่ได้มองนามสกุลไฟล์บนไฟล์ที่รวม หมายความว่า สามารถตั้งชื่อไฟล์ตามต้องการตราบเท่าที่ยังไม่ได้เรียก เมื่อใช้ require () โหลดไฟล์ จะมีผลเป็นส่วนหนึ่งของไฟล์ PHP และได้รับการประมวลผลด้วย
ตามปกติ ประโยคคำสั่ง PHP จะไม่ประมวลผลถ้าอยู่ในไฟล์ที่เรียก เช่น page.html โดย PHP จะเรียกเฉพาะการกระจายไฟล์ด้วยการกำหนดนามสกุลเช่น .php อย่างไรก็ตามถ้าโหลด page_html ผ่านประโยคคำสั่ง require () แล้ว PHP ภายในจะได้รับการประมวลผล ดังนั้นสามารถใช้นามสกุลตามต้องการสำหรับไฟล์ที่รวม แต่ความคิดที่ดีคือ พยายามเข้มงวดกับแบบแผน เช่น .inc ตามที่ได้กล่าวไปแล้ว

ภาพ 1.6.2 ผลลัพธ์การเรียกใช้สคริปต์ main.php ที่รวมไฟล์ welcome.inc

การ ใช้ include ()

ประโยคคำสั่ง require () และ include () คล้ายกันมาก แต่มีความแตกต่างสำคัญบางสิ่งตามการทำงาน
ประโยคคำสั่ง include () ได้รับการประเมินแต่ละครั้งเมื่อประโยคคำสั่งได้รับการประมวลผลและไม่มีการประเมิน ถ้าประโยคคำสั่งไม่มีการประมวลผล ประโยคคำสั่ง require () ได้รับการประมวลผลครั้งแรก เมื่อประโยคคำสั่งได้รับการกระจาย แต่กลุ่มคำสั่งที่มีประโยคคำสั่งที่เก็บอยู่จะได้รับการประมวลผล
<?php
include("welcome.inc");
?>

การระบุตำแหน่งไฟล์รวม

การอ้างอิงไฟล์ไลบรารีใน PHP สามารถกำหนดแบบสัมพัทธ์และแบบสัมบูรณ์
สำหรับ Unix
require("../../lib/db_fns.inc");
require("home/httpd/lib/output/heder.inc");
สำหรับ Windows
require("..\..\Libs\Database\connections.inc");
require("D:WebApps\Libs\MathFunctions\area.inc");
ถ้าไม่ได้ระบุพาร์ทเชิงประจักษ์ PHP จะมองหาในไดเรคทอรีปัจจุบัน ตามด้วยรายการไดเรคทอรีจากการตั้งค่า include_path ในไฟล์ php.ini ภายใต้ Unix ตัวอักษรแบ่งคือ colon (:) สำหรับ Windows ตัวอักษรแบ่งคือ semicolon (;)
ตัวอย่างการตั้งค่าภายใต้ระบบ Unix
include_path=".:/usr/local/lib/php:/home/httpd/globalincs"
ภายใต้ Windows การตั้งค่าคือ
include_path=".;C\PHP\include;D:\WebApps\Libs "

การรวมไฟล์และ Scope ของฟังก์ชัน

เมื่อมีการรวมไฟล์แล้ว การเรียกฟังก์ชันในไฟล์ที่รวมต้องอยู่หลังประโยคคำสั่ง include หรือ require ถ้าเรียกฟังก์ชันก่อนประโยคคำสั่งนี้จะเกิดความผิดพลาด
<?php
include("reverse_word.inc");
$strword = "Hello world";
word_reverse_r($strword);
echo "<br>";
?>

ปัญหาการใช้ไฟล์ร่วม

ในการใช้การรวมไฟล์ด้วยคำสั่ง require() และ include() ถ้าการอ้างอิงของสคริปต์ตั้งแต่ 2 ไฟล์ขึ้นไปอ้างถึงไฟล์ไลบรารีเดียวกัน การกระจายของ PHP จะทำซ้ำกัน จึงเกิดปัญหาที่ PHP เข้าใจว่ามีการประกาศฟังก์ชันซ้ำกัน
ตามตัวอย่าง compute_area.php รวมไฟล์ mathmetics.inc และ contruction.inc ซึ่งไฟล์คู่นี้รวมไฟล์ rectangular.inc
<?php
require("construction.inc");
require("mathmetics.inc");
?>
เมื่อเรียกใช้ compute_area.php จะปรากฎผลลัพธ์ความผิดพลาด
Fatal error : Cannot redeclare rectangular_compute_area() (previously declared in C:\AppServ\www\phptrain\chapter06\rectangular.inc:3) in C:\AppServ\www\phptrain\chapter06\rectangular.inc on line6
การหลีกเลี่ยงปัญหานี้ให้ใช้ require_once() และ include_once()
require_once("mathmetics.inc");
include_once("mathmetics.inc");

การสร้างต้นแบบ

ถ้าเว็บไซต์มีเพจจำนวนมาก ในแต่ละหน้าจะมีส่วนหัวและส่วนล่างเหมือนกัน ในกรณีนี้สามารถใช้การรวมไฟล์เพื่อเรียกไฟล์ไลบรารีต้นแบบมาสร้างส่วนที่ใช้งานร่วมกัน
ตัวอย่าง เว็บต้อนรับของ widebase.net ประกอบด้วยส่วนหัว เนื้อความ และส่วนล่าง ส่วนหัวและส่วนล่างเหมือนกันในทุกเพจ ดังนั้น จึงสร้างไฟล์ html_hrader.inc สำหรับส่วนหัว และไฟล์ html_footer.inc สำหรับส่วนล่าง
ถ้าสร้างเพจใหม่สามารถรวมไฟล์ html_header.inc สำหรับส่วนหัว และไฟล์ html_footer.inc สำหรับส่วนล่างทำหน้าที่เป็นส่วนหัวและส่วนล่างของเพจ

ฟังก์ชันใน PHP

ฟังก์ชันใน PHP

ฟังก์ชันในโปรแกรมส่วนใหญ่ได้รับการเรียกคำสั่งเพื่อทำงานอย่างเดียว สิ่งนี้ทำให้คำสั่งอ่านได้ง่ายและยอมให้ใช้คำสั่งใหม่แต่ละครั้งเมื่อต้องการทำงานเดียวกัน
ฟังก์ชันเป็นโมดูลเก็บคำสั่งที่กำหนดการเรียกอินเตอร์เฟซ ทำงานเดียวกัน และตัวเลือกส่งออกค่าจากการเรียกฟังก์ชัน คำสั่งต่อไปเป็นการเรียกฟังก์ชันอย่างง่าย
my_function ();
คำสั่งเรียกฟังก์ชันชื่อ my_function ที่ไม่ต้องการพารามิเตอร์ และไม่สนใจค่าที่อาจจะส่งออกโดยฟังก์ชันนี้
ฟังก์ชันจำนวนมากได้รับการเรียกด้วยวิธีนี้ เช่น ฟังก์ชัน phpinfo () สำหรับแสดงเวอร์ชันติดตั้งของ PHP สารสนเทศเกี่ยวกับ PHP การตั้งค่าแม่ข่ายเว็บ ค่าต่างๆ ของ PHP และตัวแปร ฟังก์ชันนี้ไม่ใช้พารามิเตอร์และโดยทั่วไปไม่สนใจค่าส่งออก ดังนั้นการเรียก phpinfo () จะประกอบขึ้นดังนี้
phpinfo ();

การกำหนดฟังก์ชันและการเรียกฟังก์ชัน

การประกาศฟังก์ชันเริ่มต้นด้วยคีย์เวิร์ด function กำหนดชื่อฟังก์ชัน พารามิเตอร์ที่ต้องการ และเก็บคำสั่งที่จะประมวลผลแต่ละครั้งเมื่อเรียกฟังก์ชันนี้
<?php
function function_name(parameter1,…)
{
ชุดคำสั่ง …
}
?>
ชุดคำสั่งต้องเริ่มต้นและสิ้นสุดในวงเล็บปีกกา ({ }) ตัวอย่างฟังก์ชัน my_function
<?php
function my_function()
{
$mystring =<<<BODYSTRING
my function ได้รับการเรียก
BODYSTRING;
echo $mystring;
}
?>
การประกาศฟังก์ชันนี้ เริ่มต้นด้วย function ดังนั้นผู้อ่านและตัวกระจาย PHP ทราบว่าต่อไปเป็นฟังก์ชันกำหนดเอง ชื่อฟังก์ชันคือ my_function การเรียกฟังก์ชันนี้ใช้ประโยคคำสั่งนี้
my_function ();
การเรียกฟังก์ชันนี้จะให้ผลลัพธ์เป็นข้อความ "my function ได้รับการเรียก " บน browser

การตั้งชื่อฟังก์ชัน

สิ่งสำคัญมากในการพิจารณาเมื่อตั้งชื่อฟังก์ชันคือชื่อต้องสั้นแต่มีความหมาย ถ้าฟังก์ชันสร้างส่วนตัวของเพจควรตั้งชื่อเป็น pageheader () หรือ page_header ()
ข้อจำกัดในการตั้งชื่อคือ
  • ฟังก์ชันไม่สามารถมีชื่อเดียวกับฟังก์ชันที่มีอยู่
  • ชื่อฟังก์ชันสามารถมีได้เพียงตัวอักษรตัวเลข และ underscore
  • ชื่อฟังก์ชันไม่สามารถเริ่มต้นด้วยตัวเลข
หลายภาษายอมให้ใช้ชื่อฟังก์ชันได้อีก ส่วนการทำงานนี้เรียกว่า function overload อย่างไรก็ตาม PHP ไม่สนับสนุน function overload ดังนั้นฟังก์ชันไม่สามารถมีชื่อเดียวกันกับฟังก์ชันภายใน หรือฟังก์ชันกำหนดเองที่มีอยู่
หมายเหตุ ถึงแม้ว่าทุกสคริปต์ PHP รู้จักฟังก์ชันภายในทั้งหมด ฟังก์ชันกำหนดเองอยู่เฉพาะในสคริปต์ที่ประกาศสิ่งนี้หมายความว่า ชื่อฟังก์ชันสามารถใช้ในคนละไฟล์แต่อาจจะไปสู่ความสับสน และควรหลีกเลียง
ชื่อฟังก์ชันต่อไปนี้ถูกต้อง
name ()
name2 ()
name_three ()
_namefour ()
ชื่อไม่ถูกต้อง
5name ()
Name-six ()
fopen ()
การเรียกฟังก์ชันไม่มีผลจากชนิดตัวพิมพ์ ดังนั้นการเรียก function_name (), Function_Name() หรือ FUNCTION_NAME() สามารถทำได้และมีผลลัพธ์เหมือนกัน แต่แบบแผนการกำหนดชื่อฟังก์ชันใน PHP ให้ใช้ตัวพิมพ์เล็ก
ชื่อฟังก์ชันแตกต่างจากชื่อตัวแปร โดยชื่อตัวแปรเป็นชนิดตัวพิมพ์มีผล ดังนั้น $Name และ $name เป็น 2 ตัวแปร แต่ Name () และ name () เป็นฟังก์ชันเดียวกัน

การหยุดประมวลผลภายในฟังก์ชัน

คีย์เวิร์ด return หยุดการประมวลผลฟังก์ชัน ฟังก์ชันสิ้นสุดได้เพราะประโยคคำสั่งทั้งหมดได้รับการประมวลผล หรือ ใช้คีย์เวิร์ด return การประมวลผลกลับไปยังประโยคคำสั่งต่อจากการเรียกฟังก์ชัน
<?php
function division($x, $y)
{
if ($y == 0 || !isset($y))
{
echo " ตัวหาร y ต้องไม่เป็นศูนย์หรือไม่มีค่า" ;
return;
}
$result = $x / $y;
echo $result;
}
?>
ถ้าประโยคคำสั่ง return ได้รับการประมวลผล บรรทัดคำสั่งต่อไปในฟังก์ชันจะถูกข้ามไป และกลับไปยังผู้เรียกฟังก์ชันนี้ ในฟังก์ชันนี้ ถ้า y เป็น 0 จะหยุดการประมวลผล ถ้า y ไม่เท่ากับ 0 จะคำนวณผลหาร
สมมติป้อนค่าเป็น
x = 4, y = 0
x = 4
x = 4, y = 2
ผลลัพธ์ของคำสั่ง คือ
x = 4, y = 0 ผลลัพธ์ ตัวหาร y ต้องไม่เป็นศูนย์หรือไม่มีค่า
x = 4, y = ผลลัพธ์ ตัวหาร y ต้องไม่เป็นศูนย์หรือไม่มีค่า
x = 4, y = 2 ผลลัพธ์ 2

การเรียกฟังก์ชัน

เมื่อฟังก์ชันได้รับการประกาศหรือสร้างขึ้นแล้ว การเรียกฟังก์ชันสามารถเรียกมาจากที่ใดๆ ภายในสคริปต์ หรือ จากไฟล์ที่มีการรวมด้วยประโยคคำสั่ง include() หรือ require()
ตัวอย่าง ฟังก์ชัน show_message() เก็บอยู่ในไฟล์ fn_ 03 _keeper.php ส่วนผู้เรียกอยู่ในสคริปต์ fn_ 03 _caller.php
<?php
include("fn_ 03 _keeper.php");
show_message();
?>

พารามิเตอร์

ตามปกติฟังก์ชันส่วนใหญ่ต้องการรับสารสนเทศจากผู้เรียกสำหรับการประมวลผล โดยทั่วไปเรียกว่า พารามิเตอร์

ไวยากรณ์พื้นฐาน

การกำหนดฟังก์ให้รับพารามิเตอร์ส่งผ่านโดยการวางข้อมูล ชื่อตัวแปรที่เก็บข้อมูลภายในวงเล็บหลังชื่อฟังก์ชัน การเรียกฟังก์ชันที่ประกอบด้วยพารามิเตอร์เขียนดังนี้
<?php
function show_parameter($param1, $param2, $param3)
{
echo <<<PARAM
รายการพารามิเตอร์ <br/>
param1: $param1 <br/>
param2: $param2 <br/>
param3: $param3 <br/>
PARAM;
}
?>
พารามิเตอร์ที่ส่งไปยังฟังก์ชันแยกกันเครื่องหมายจุลภาคภายในวงเล็บ โดยสามารถส่งเป็นนิพจน์สำหรับแต่ละพารามิเตอร์ด้วย ตัวแปร ค่าคงที่ ผลลัพธ์จากการคำนวณ รวมถึงการเรียกฟังก์ชัน
scope ของพารามิเตอร์จำกัดภายในฟังก์ชัน ถ้าชื่อตัวแปรเหมือนกับตัวแปรใน scope ระดับอื่น พารามิเตอร์นี้ "ระบุ" เป็นตัวแปรภายในที่ไม่มีผลกับตัวแปรภายนอกฟังก์ชัน

การส่งผ่านโดยค่า(By Value)

ตามปกติการส่งผ่านพารามิเตอร์ไปยังฟังก์ชันเป็นการส่งผ่านค่า การเปลี่ยนแปลงจะจำกัดภายในเฉพาะภายในฟังก์ชัน
ตัวอย่างฟังก์ชัน new_value () ที่ยอมให้เพิ่มค่า อาจจะเขียนคำสั่งดังนี้
<?php
function new_value($value, $increment= 1)
{
$value = $value + $increment;
}
$value = 10 ;
new_value($value);
echo "$value<br/>\n";
?>
คำสั่งนี้ใช้ไม่ได้ ผลลัพธ์จะเป็น "10" ค่าใหม่ของ $value ไม่มีการเปลี่ยนแปลง
สิ่งนี้เป็นเพราะกฎ scope คำสั่งนี้สร้างตัวแปรเรียกว่า $value เป็น 10 เมื่อเรียกฟังก์ชัน new_value () ตัวแปร $value ในฟังก์ชันได้รับการสร้างเมื่อเรียกฟังก์ชัน ค่า 1 ได้รับการเพิ่มให้กับตัวแปร ดังนั้นค่าของ $value คือ 11 ภายในฟังก์ชัน จนกระทั่งสิ้นสุดฟังก์ชัน แล้วกลับไปยังคำสั่งที่เรียกภายในคำสั่งนี้ ตัวแปร $value เป็นอีกตัวแปร global scope และไม่มีการเปลี่ยนแปลง

การส่งผ่านโดยการอ้างอิง (By Reference)

ตามตัวอย่างฟังก์ชัน new_value ถ้าต้องการให้ฟังก์ชันเปลี่ยนแปลงค่าได้ มีวิธีหนึ่งในการแก้ไขคือ ประกาศ $value ในฟังก์ชันเป็น global แต่หมายความว่าในการใช้ฟังก์ชันนี้ ตัวแปรที่ต้องการเพิ่มค่าต้องตั้งชื่อเป็น $value แต่มีวิธีดีกว่าคือ ใช้การส่งผ่านโดยการอ้างอิง
การอ้างอิงไปตัวแปรต้นทางแทนที่มีค่าของตัวเอง การปรับปรุงไปยังการอ้างอิงจะมีผลกับตัวแปรต้นทางด้วย
การระบุพารามิเตอร์ที่ใช้การส่งผ่านโดยการอ้างอิงให้วาง ampersand (&) หน้าชื่อพารามิเตอร์ในข้อกำหนดฟังก์ชัน
ตัวอย่าง new_value () ได้รับปรับปรุงให้มี 1 พารามิเตอร์ส่งผ่านโดยการอ้างอิงและทำงานได้อย่างถูกต้อง
<?php
function new_value(&$value, $increment=1)
{
$value = $value + $increment;
}
?>
คำสั่งทดสอบฟังก์ชัน ให้พิมพ์ 10 ก่อนการเรียก increment () และ 11 ภายหลัง
ในการส่งค่าโดยการอ้างอิงต้องส่งเป็นตัวแปรไม่สามารถกำหนดค่าคงที่โดยตรง

จำนวนตัวแปรของพารามิเตอร์

การส่งผ่านพารามิเตอร์ไปยังฟังก์ชันนั้น การควบคุมของ PHP ได้กำหนดฟังก์ชันจำนวนหนึ่งให้ยอมรับจำนวนตัวแปรของพารามิเตอร์ ได้แก่ func_num_args, func_get_arg และ func_get_args
func_num_args() บอกจำนวนพารามิเตอร์ไปยังฟังก์ชันที่เรียก func_get_arg() แสดงค่าของพารามิเตอร์ตามดัชนี และ func_get_args() ส่งออก array ของพารามิเตอร์
<?php
function show_pass_value()
{
$idx = count(func_get_args());
echo " จำนวนพารามิเตอร์ $idx <br/>\n";
if ($idx > 0)
    echo ">> ใช้ฟังก์ชัน func_get_arg<br/>\n";
for ($i = 0 ; $i < $idx; $i++)
{
echo " พารามิเตอร์ที่ $i ค่า: ". func_get_arg($i)."<br/>\n";
}
if ($idx > 0)
    echo ">> ใช้ฟังก์ชัน func_get_args<br/>\n";
$params = func_get_args();
foreach ($params as $index => $val)
{
echo " พารามิเตอร์ที่ $index ค่า: $val<br/>\n";
}
echo " *********<br/>\n";
}
$x = 4 ;
show_pass_value("one", "two", 3 , $x, " ห้า" , " หก") ;
show_pass_value();
?>
ผลลัพธ์
จำนวนพารามิเตอร์ 6
>> ใช้ฟังก์ชัน func_get_arg
พารามิเตอร์ที่ 0 ค่า: one
พารามิเตอร์ที่ 1 ค่า: two
พารามิเตอร์ที่ 2 ค่า: 3
พารามิเตอร์ที่ 3 ค่า: 4
พารามิเตอร์ที่ 4 ค่า: ห้า
พารามิเตอร์ที่ 5 ค่า: หก
>> ใช้ฟังก์ชัน func_get_args
พารามิเตอร์ที่ 0 ค่า: one
พารามิเตอร์ที่ 1 ค่า: two
พารามิเตอร์ที่ 2 ค่า: 3
พารามิเตอร์ที่ 3 ค่า: 4
พารามิเตอร์ที่ 4 ค่า: ห้า
พารามิเตอร์ที่ 5 ค่า: หก
*********
จำนวนพารามิเตอร์ 0
*********

Scope

เมื่อต้องการใช้ตัวแปรภายในไฟล์ที่รวม ต้องมีการประกาศตัวแปรเหล่านั้นก่อนประโยคคำสั่ง require () หรือ include () แต่เมื่อใช้ฟังก์ชันจะเป็นการส่งผ่านตัวแปรเชิงประจักษ์เหล่านั้นไปยังฟังก์ชัน บางส่วนเป็นเพราะไม่มีกลไกส่งผ่านตัวแปรเชิงประจักษ์ไปยังไฟล์ที่รวม และบางส่วนเป็นเพราะ scope ของตัวแปรของฟังก์ชันแตกต่างกัน
การควบคุม scope ของตัวแปรเป็นการทำให้ตัวแปรมองเห็นได้ ใน PHP มีกฎตั้งค่า scope ดังนี้
  • การประกาศตัวแปรภายในฟังก์ชันอยู่ใน scope จากประโยคคำสั่งซึ่งตัวแปรให้รับการประกาศภายในวงเล็บปีกกา สิ่งนี้เรียกว่า function scope ตัวแปรเรียกว่า local variable
  • การประกาศตัวแปรภายนอกฟังก์ชันอยู่ใน scope จากประโยคคำสั่งซึ่งตัวแปรได้รับการประกาศที่สิ้นสุดแต่ไม่ใช้ภายในฟังก์ชัน สิ่งนี้เรียกว่า global scope ตัวแปรเรียกว่า global variable
  • การใช้ประโยคคำสั่ง require () และ include () ไม่มีผลกับ scope ถ้าประโยคคำสั่งได้รับการใช้ภายในฟังก์ชัน ประยุกต์ด้วย function scope ถ้าไม่ได้อยู่ภายในฟังก์ชัน ประยุกต์ด้วย global scope
  • คีย์เวิร์ด global สามารถระบุได้เองเพื่อกำหนดหรือใช้ตัวแปรภายในฟังก์ชันให้มี scope เป็น global
  • ตัวแปร สามารถลบโดยการเรียก unset ($variable_name) และตัวแปรที่ unset จะไม่มี scope
  • ตัวแปรระดับ superglobal สามารถเข้าถึงได้ทุกส่วนในสคริปต์

ตัวแปรระดับฟังก์ชัน

ตัวแปรระดับฟังก์ชันหรือ local variable เป็นการประกาศเพื่อใช้เฉพาะภายในฟังก์ชัน ไม่สามารถเรียกจากภายนอกฟังก์ชันได้
<?php
$newline = <<<NLSTRING
<br/>\n
NLSTRING;
$var_global = 10 ;
function show_value()
{
global $newline;
$var_local= 75 ;
echo "\$var_local 1: $var_local";
echo $newline;
}
show_value();
echo "\$var_global : $var_global";
echo $newline;
echo "\$var_local 2: $var_local";
echo $newline;
?>
ผลลัพธ์
$var_global 1 :
$var_local 1: 75
$var_global 2: 10
$var_local 2:
ตามตัวอย่างนี้ ตัวแปรระดับฟังก์ชัน $var_local ไม่สามารถแสดงผลในการพิมพ์ภายนอกฟังก์ชัน show_value() และ $var_global ที่เป็นตัวแปรระดับ global ไม่สามารถแสดงผลภายใน show_value() เพราะมี scope ต่างกัน

ตัวแปรระดับ global

ถ้าต้องการนำตัวแปรระดับ global มาใช้ภายในฟังก์ชันต้องประกาศด้วยคีย์เวิร์ด global ก่อนประโยคคำสั่งที่ใช้ตัวแปรนั้น ตัวอย่าง ฟังก์ชัน show_value() ใช้ $newline จากภายนอกฟังก์ชัน
global $newline;

ตัวแปรสถิตย์

การประกาศตัวแปรสถิตย์ใช้ คีย์เวิร์ด static เมื่อมีการเรียกใช้ฟังก์ชัน โปรแกรมจะกำหนดค่าตัวแปรตามที่ระบุเพียงครั้งเดียว ถ้าเรียกซ้ำอย่างต่อเนื่องค่านี้จะเปลี่ยนแปลงตามการคำนวณ
<?php
function increment()
{
static $increase = 5 ;
$increase++;
echo $increase."<br/>\n";
}
$end = 5 ;
for ($i = 1 ; $i < $end; $i++)
    increment();
?>
ผลลัพธ์
6
7
8
9
ค่าของตัวแปรสถิตย์ได้รับการตั้งทุกครั้งเมื่อเรียกใช้ในครั้งต่อไป

การส่งออกค่าจากฟังก์ชัน

การส่งค่าออกจากฟังก์ชันใช้คีย์เวิร์ด return เช่นเดียวกับการออกจากฟังก์ชันได้ ถ้าไม่มีการระบุส่งออกฟังก์ชันจะส่งค่า NULL
ตัวอย่าง ฟังก์ชัน get_larger () สาธิตการส่งออกค่า
<?
function get_larger($x=NULL, $y=NULL)
{
if (!isset($x) || !isset($y))
    return " ไม่มีการส่งค่า" ;
if ($x > $y)
    return $x;
else if ($x < $y)
    return $y;
else
    return " ค่าเท่ากัน" ;
}
$sends = array();
$sends[0] = array('x' =>5);
$sends[1] = array('x' =>9, 'y'=>3);
$sends[2] = array('x' =>5, 'y'=>8);
$sends[3] = array('x' =>4, 'y'=>4);
foreach ($sends as $send)
{
echo "x = ".$send['x']." y = ".$send['y']." : ค่า - > "
.get_larger($send['x'], $send['y']);
echo "<br/>\n";
}
?>
ผลลัพธ์
x = 5 y = : ค่า - > ไม่มีการส่งค่า
x = 9 y = 3 : ค่า - > 9
x = 5 y = 8 : ค่า - > 8
x = 4 y = 4 : ค่า - > ค่าเท่ากัน
ฟังก์ชันที่ทำงานอาจเดียว แต่ไม่จำเป็นต้องส่งออกค่า มักจะส่งออก TRUE หรือ FALSE เพื่อระบุความสำเร็จหรือล้มเหลว ค่า TRUE หรือ FALSE สามารถได้รับการแสดงแทนด้วย 1 หรือ 0

Recursion

recursion ได้รับการสนับสนุนใน PHP ฟังก์ชันชนิดนี้เป็นการเรียกตัวเองและเป็นประโยชน์กับการบังคับโครงสร้างข้อมูลไดนามิคส์ เช่น รายการเชื่อมโยงและโครงสร้างต้นไม้ (tree)
โปรแกรมประยุกต์เว็บจำนวนไม่มากต้องการโครงสร้างข้อมูลซับซ้อนมากและจำกัดการใช้ เนื่องจาก recursion ช้ากว่าและใช้หน่วยความจำมากกว่าการทำงานวนรอบ ดังนั้นควรเลือกการทำงานแบบวนรอบปกติ ถ้าเป็นไปได้
ตัวอย่างการประยุกต์แบบย้อนกลับตัวอักษร
<?php
function word_reverse_r($str)
{
if (strlen($str)>0)
    word_reverse_r(substr($str, 1));
echo substr($str, 0, 1);
return;
}
function word_reverse_i($str)
{
for ($i=1; $i<=strlen($str); $i++)
{
echo substr($str, -$i, 1);
}
return;
}
?>
รายการคำสั่งของ 2 ฟังก์ชันนี้จะพิมพ์ข้อความย้อนกลับ ฟังก์ชัน word_reverse_r เป็น recursion ฟังก์ชัน word_reverse_i เป็นการวนรอบ
ฟังก์ชัน word_reverse_r ใช้ข้อความเป็นพารามิเตอร์ เมื่อมีการเรียกฟังก์ชันนี้ จะเกิดการเรียกตัวเองแต่ละครั้งส่งผ่านตัวอักษรที่ 2 ไปถึงตัวอักษรสุดท้าย
การเรียกฟังก์ชันแต่ละครั้งจะทำสำเนาใหม่ของคำสั่งในหน่วยความจำของแม่ข่าย แต่ด้วยพารามิเตอร์ต่างกัน ดังนั้นจึงเหมือนกับการเรียกคนละฟังก์ชัน

ที่มา http://www.widebase.net/internet/php/phpbasic/phpbasic0602.shtml