การสร้างและเรียกใช้ฟังก์ชั่น Function อาจารย์สุธาสินี  เส้นขาว
ความหมาย ฟังก์ชั่น ( Function )  หมายถึง กลุ่มของคำสั่งที่ถูกนำมารวบรวมไว้ด้วยกัน เพื่อให้สามารถเรียกใช้ได้อย่างสะดวกและเป็นระบบ ฟังก์ชั่นใน  PHP  มี  2  แบบคือ  การสร้างฟังก์ชั่นขึ้นมาใช้งานเอง เรียกว่า  user-defined functions ฟังก์ชั่นที่มีให้เรียกใช้อยู่แล้ว เรียกว่า  built-in functions  เช่น ฟังก์ชั่น  chr() , substr()
การประกาศฟังก์ชั่น มีรูปแบบดังนี้ ชื่อฟังก์ชั่น  :  เป็นชื่อที่ตั้งขึ้นสำหรับเรียกใช้ฟังก์ชั่นนั้น อาร์กิวเมนต์ 1, อาร์กิวเมนต์ 2,… เป็นตัวแปรชนิดต่างๆโดยระบุไว้ระหว่างวงเล็บเปิดกับวงเล็บปิด ซึ่งจะใช้อาร์กิวเมนต์ในการรับข้อมูลเข้ามาประมวลผล และส่งข้อมูลกลับออกไป ( สำหรับอาร์กิวเมนต์ที่ถูกกำหนดให้ส่งผ่านแบบ  by reference ) คำสั่ง  :  เป็นส่วนการทำงานภายในฟังก์ชั่น Function  ชื่อฟังก์ชั่น  ([ อาร์กิวเมนต์ 1, อาร์กิวเมนต์ 2,…]){ คำสั่ง ; }
ตัวอย่างการสร้างฟังก์ชั่น ( 1 ) ตัวอย่างฟังก์ชั่นที่รับอาร์กิวเมนต์ <? function  carea ( $dia,$mode ) { if ( $mode == 0 ) { $area =( 22/28 )* $dia * $dia; // 22/7 * 1/4 return  $area; }elseif ( $mode == 1 ) { $area  =  $dia * $dia; return  $area; } } $diameter  =  7; echo  &quot; วงกลมเส้นผ่านศูนย์กลางยาว  $diameter  หน่วย มีพื้นที่  =&quot;. carea ( $diameter,0 ).&quot; ตารางหน่วย <br> &quot; ; echo  &quot; สี่เหลี่ยมจตุรัสยาวด้านละ  $diameter  หน่วย มีพื้นที่  =&quot;. carea ( $diameter,1 ).&quot; ตารางหน่วย <br> &quot; ; ?>
ตัวอย่างการสร้างฟังก์ชั่น (2) ตัวอย่างฟังก์ชั่นที่ไม่รับอาร์กิวเมนต์ <? function growname () { $myname  = &quot; nana &quot; ; $newname  = &quot;&quot; ; for ( $i = 0;$i<strlen ( $myname ) ;$i ++) { $newname  .=  substr ( $myname,$i,1 ) ; echo $newname .&quot; <br> &quot; ; } } growname () ; ?> จากตัวอย่างนี้ ถ้าลองเปลี่ยนเป็นฟังก์ชั่นที่รับอาร์กิวเมนต์เข้ามาหนึ่งตัวเพื่อแทนชื่อที่รับเข้ามาจะได้รูปแบบฟังก์ชั่นเป็นอย่างไร
รายละเอียดการทำงานของฟังก์ชั่น ฟังก์ชั่นจัดเป็น  case insensitive  คือสามารถเรียกใช้ด้วยตัวพิมพ์ใหญ่หรือพิมพ์เล็กก็ได้ เช่น <? function area ($x,$y){ return $x*$y; } $xFunc = “area”; print “Area 12.5 x 20 =”.$xFunc(12.5,20); ?>
รายละเอียดการทำงานของฟังก์ชั่น ผลลัพธ์ของโปรแกรมคือ ในตัวอย่าง ตัวแปร  $xFunc  จะเก็บสตริงคำว่า  “ area”  เอาไว้ ซึ่งเป็นชื่อของฟังก์ชั่น  area()  ที่สร้างขึ้น ทำให้การอ้างถึงตัวแปร  $xFunc  จะเป็นการเรียกใช้ฟังก์ชั่น  area()  ด้วย
การส่งผ่านค่าให้แก่ฟังก์ชั่น บางฟังก์ชั่นอาจไม่จำเป็นต้องรับค่าใดๆจากโปรแกรมหลักก็สามารถทำงานและให้ผลลัพธ์ได้ เช่น ฟังก์ชั่น  time()  จะให้ค่าเป็น  timestamp  ของวันที่และเวลาปัจจุบัน แต่กรณีที่ฟังก์ชั่นต้องการค่าบางอย่างจากโปรแกรมที่เรียกใช้ จะทำได้โดยการส่งค่าผ่านพารามิเตอร์ โดยการส่งผ่านค่าให้กับฟังก์ชั่นทำได้สองวิธีคือ การส่งผ่านด้วยค่า  ( Passing by Values ) การส่งผ่านด้วยการอ้างอิง  ( Passing by Reference )
การส่งผ่านด้วยค่า  ( Passing by Values ) เป็นวิธีการส่งผ่านค่าที่มักใช้โดยทั่วไป คือ เมื่อใส่ตัวแปรเป็นอาร์กิวเมนต์  ( argument )  ให้กับฟังก์ชั่นแล้ว ถึงแม้ในฟังก์ชั่นจะมีการเปลี่ยนค่าของตัวแปรพารามิเตอร์ที่รับค่ามาจากอาร์กิวเมนต์นั้น ค่าของตัวแปรอาร์กิวเมนต์ที่อยู่ภายนอกฟังก์ชั่นก็ไม่เปลี่ยนแปลง
ตัวอย่างการส่งผ่านค่าของตัวแปร 1 <? $var  =  150; $str  = &quot; A &quot; ; function sendVal ( $newVar,$newStr ) { $newVar  +=  100; ++ $newStr; echo  &quot; ค่าของ  \$newVar  คือ  &quot;. $newVar .&quot; <br> &quot; ; echo  &quot; ค่าของ  \$newStr  คือ  &quot;. $newStr .&quot; <br> &quot; ; } ?> ค่าของฟังก์ชั่น  $var ( ก่อนเรียกฟังก์ชั่น )  คือ  <?echo $var;?><br> ค่าของฟังก์ชั่น  $str ( ก่อนเรียกฟังก์ชั่น )  คือ  <?echo $str;?><br> <?sendVal ( $var,$str ) ;?> ค่าของฟังก์ชั่น  $var ( หลังเรียกฟังก์ชั่น )  คือ  <?echo $var;?><br> ค่าของฟังก์ชั่น  $str ( หลังเรียกฟังก์ชั่น )  คือ  <?echo $str;?><br>
ตัวอย่างการส่งผ่านค่าของตัวแปร 2 <? function mat ( $p1,$p2 ) { $p1  =  $p1+$p2; return $p1 * $p2; } $x  =  15;$y  =  4; print  &quot; Before use Function<br> &quot; ; print  &quot; \$x  =  $x<br> &quot; ; print  &quot; \$y  =  $y<br> &quot; ; $z  =  mat ( $x,$y ) ; print  &quot; After use Function<br> &quot; ; print  &quot; \$x  =  $x<br> &quot; ; print  &quot; \$y  =  $y<br> &quot; ; print  &quot; \$z  =  $z<br> &quot; ; ?> ค่า  z  จะมาจากการที่เอาค่า  x  คูณกับค่า  y  โดยที่ ค่า  x  ที่เอามาคูณจะเป็นค่า  x  บวกค่า  y  ไปแล้ว เพราะฉะนั้นค่าที่ส่งกลับไปก็คือ  (15+4)*4 76
การส่งผ่านด้วยการอ้างอิง  ( Passing by Reference ) เมื่อใส่สัญลักษณ์  & (ampersand)  เข้าไปไว้หน้าอาร์กิวเมนต์ในขณะสร้างฟังก์ชั่น จะมีผลให้เป็นการส่งผ่านด้วยการอ้างอิง โดยหากในฟังก์ชั่นมีการเปลี่ยนค่าตัวแปรอาร์กิวเมนต์นั้น ค่าของตัวแปรภายนอกฟังก์ชั่นจะถูกเปลี่ยนตามด้วย
ตัวอย่างการส่งผ่านด้วยการอ้างอิง 1 <? $var  =  150; $str  = &quot; A &quot; ; function sendVal ( &$newVar,&$newStr ) { $newVar  +=  100; ++ $newStr; echo  &quot; ค่าของ  \$newVar  คือ  &quot;. $newVar .&quot; <br> &quot; ; echo  &quot; ค่าของ  \$newStr  คือ  &quot;. $newStr .&quot; <br> &quot; ; } ?> ค่าของฟังก์ชั่น  $var ( ก่อนเรียกฟังก์ชั่น )  คือ  <?echo $var;?><br> ค่าของฟังก์ชั่น  $str ( ก่อนเรียกฟังก์ชั่น )  คือ  <?echo $str;?><br> <?sendVal ( $var,$str ) ;?> ค่าของฟังก์ชั่น  $var ( หลังเรียกฟังก์ชั่น )  คือ  <?echo $var;?><br> ค่าของฟังก์ชั่น  $str ( หลังเรียกฟังก์ชั่น )  คือ  <?echo $str;?><br> การใส่  &  ในอาร์กิวเมนต์ ของฟังก์ชั่นเพื่อให้เป็นการส่ง ผ่านแบบอ้างอิง ( passing by reference )
ตัวอย่างการส่งผ่านด้วยการอ้างอิง 2 <? function mat ( &$p1,$p2 ) { $p1  =  $p1+$p2; return $p1 * $p2; } $x  =  15;$y  =  4; print  &quot; Before use Function<br> &quot; ; print  &quot; \$x  =  $x<br> &quot; ; print  &quot; \$y  =  $y<br> &quot; ; $z  =  mat ( $x,$y ) ; print  &quot; After use Function<br> &quot; ; print  &quot; \$x  =  $x<br> &quot; ; print  &quot; \$y  =  $y<br> &quot; ; print  &quot; \$z  =  $z<br> &quot; ; ?>
การกำหนดค่าเริ่มต้น ( default ) ให้กับอาร์กิวเมนต์ บางกรณีที่ต้องการสร้างฟังก์ชั่นโดยมรอาร์กิวเมนต์เป็นออปชั่น คือในขณะเรียกใช้ฟังก์ชั่นจะใส่อาร์กิวเมนต์หรือไม่ใส่ก็ได้  จะต้องมีการกำหนดค่าสำหรับอาร์กิวเมนต์ไว้ล่วงหน้า
ตัวอย่างการกำหนดค่า  default  ให้อาร์กิวเมนต์ จากตัวอย่างฟังก์ชั่น 2   ถ้าเปลี่ยนมาเป็นการกำหนดค่า  default  ให้กับอาร์กิวเมนต์ จะเป็นดังนี้ <? function growname ( $myname = “Test” ) { $newname  = &quot;&quot; ; for ( $i = 0;$i<strlen ( $myname ) ;$i ++) { $newname  .=  substr ( $myname,$i,1 ) ; echo $newname .&quot; <br> &quot; ; } } growname ( “nana” ) ; growname () ; ?>
การคืนค่ามากกว่า  1  ค่า เมื่อต้องการใช้ฟังก์ชั่นคืนค่าให้มากกว่า  1  ค่า สามารถอาศัยคุณสมบัติฟังก์ชั่นใน  PHP  สามารถคืนค่าเป็นอาร์เรย์ได้ โดยการเขียนคำสั่งการคืนค่าในลักษณะดังนี้ return  array($var1,$var2)
ตัวอย่างการคืนค่ามากกว่า  1  ค่า <? function calculator($x,$y){ $a = $x+$y; $b = $x-$y; $c = $x*$y; $myarr[0] = $a; $myarr[1] = $b; $myarr[2] = $c; return  $myarr; } $x=20; $y=12; $value = calculator($x,$y); print &quot;$x + $y = &quot;.$value[0].&quot;<br>&quot;;  print &quot;$x - $y = &quot;.$value[1].&quot;<br>&quot;; print &quot;$x * $y = &quot;.$value[2].&quot;<br>&quot;; ?>
ขอบเขต  scope  ของตัวแปรและค่าคงที่ ตัวแปรที่ประกาศไว้ในฟังก์ชั่นใด จะเป็นที่รู้จักและเรียกใช้ฟังก์ชั่นนั้น ถึงแม้ว่าจะมีการประกาศตัวแปรชื่อเดียวกันไว้ในทั้งในและนอกฟังก์ชั่น ก็ถือว่าเป็นตัวแปรคนละตัวและมีตำแหน่งในหน่วยความจำคนละที่กัน <? $myName  = &quot; suthasinee &quot; ; function testVar () { $myName  =  1500.25; return  $myName; } echo  &quot; ตัวแปร  \$myName  มีค่า  $myName <br> &quot; ; echo  &quot; ตัวแปร  \$myName  ในฟังก์ชั่นมีค่า &quot;. testVar ().&quot; <br> &quot; ; echo  &quot; ตัวแปร  \$myName  หลังจากเรียกฟังก์ชั่นมีค่า  $myName <br> &quot; ; ?>
ขอบเขต  scope  ของตัวแปรและค่าคงที่ ( ต่อ ) จากตัวอย่าง ค่าของตัวแปร  $myName  ที่อยู่ภายในและภายนอกฟังก์ชั่นจะมีค่าเป็นของตัวเอง  ถ้าเราต้องการอ้างถึงตัวแปร  $myName  ที่อยู่ภายนอกจากภายในฟังก์ชั่น ก็จะต้องประกาศตัวแปรนั้นโดยใช้คำสั่ง  global  มีรูปแบบดังนี้ Global  var_name1, var_name2, var_name3,…; โดยการประกาศนี้จะต้องทำภายในฟังก์ชั่นดังตัวอย่าง
ตัวอย่างคำสั่ง  global <? $myVar  =  500; function TestVar () { global $myVar; $myVar ++ ; } echo  &quot; ค่าของ  \$myVar  ก่อนเรียกฟังก์ชั่น  : $myVar<br> &quot; ; TestVar () ; echo  &quot; ค่าของ  \$myVar  หลังจากเรียกฟังก์ชั่น  : $myVar<br> &quot; ; ?>
การสร้างตัวแปรแบบ  static โดยทั่วไปแล้วปกติตัวแปรที่เราประกาศไว้ภายในฟังก์ชั่นจะถูกทำลายไปหลังจากการทำงานของฟังก์ชั่นนั้นๆสิ้นสุดลง และจะถูกสร้างขึ้นมาใหม่ตอนที่เราเรียกใช้ฟังก์ชั่น หรือฟังก์ชั่นไม่สามารถรักษาค่าของตัวแปรเหล่านี้ให้คงสภาพอยู่ได้ในระหว่างการทำงานแต่ละครั้ง
ตัวอย่างฟังก์ชั่นที่ไม่ได้สร้างเป็น  static <? function testloop () { $value  =  150; $str  = &quot; A &quot; ; echo  &quot; ค่าของ  \$value  คือ  $value, &quot; ; echo  &quot; ค่าของ  \$str  คือ  $str<br> &quot; ; $value  -=  10; $str ++ ; } for ( $i = 0;$i<4;$i ++) { testloop () ; } ?>
ตัวอย่างฟังก์ชั่นที่สร้างเป็น  static <? function testloop () { static $value  =  150; static $str  = &quot; A &quot; ; echo  &quot; ค่าของ  \$value  คือ  $value, &quot; ; echo  &quot; ค่าของ  \$str  คือ  $str<br> &quot; ; $value  -=  10; $str ++ ; } for ( $i = 0;$i<4;$i ++) { testloop () ; } ?>
ฟังก์ชั่นที่เรียกตัวเอง  ( Recursive Function ) ฟังก์ชั่นใน  PHP  มีความสามารถในการเรียกตัวเอง  ( recursion )  ได้เช่นเดียวกันกับอีกหลายภาษา โดยใน  PHP4 , 5  สามารถนำสคริปต์ที่คอมไพล์ไว้แล้วกลับมาทำงานซ้ำได้ทันที จึงเร็วกว่า  PHP3
ตัวอย่างการทำ  Recursive Function <? function xx($a){ $a = $a/2; print &quot;\$a = $a<br>&quot;; if(gettype($a)==&quot;integer&quot;){ xx($a); } } xx(1000); ?>
ทดสอบ ให้สร้างฟังก์ชั่น  2  ฟังก์ชั่นโดยที่ มีการเรียกใช้ฟังก์ชั่นที่  2  ภายในฟังก์ชั่นที่  1 ฟังก์ชั่นที่  1  ให้เป็นการทำงานที่ไม่มีการรับอาร์กิวเมนต์เข้ามาในฟังก์ชั่น โดยที่เป็นการสร้างวันที่และเวลาจากค่า  timestamp  หลังจากนั้นให้ทำการแยกระหว่างวันที่และเวลา รูปแบบของวันที่และเวลาที่ต้องการได้ เช่น  11/06/08 2:04:48  เมื่อได้ส่วนของวันที่มาแล้วให้ทำการตรวจสอบรูปแบบของวันที่ว่าอยู่ในรูปแบบ  dd/mm/yy  หรือไม่ผ่านฟังก์ชั่นของ  regular expression ฟังก์ชั่นที่  2  ทำการเรียกใช้ฟังก์ชั่นที่  1  ในส่วนต้นของฟังก์ชั่น หลังจากนั้นให้ทำการ รับอาร์กิวเมนต์เข้ามาในฟังก์ชั่น โดยตัวแปรที่ส่งเข้ามาคือค่าฐานและสูง เพื่อส่งมาคำนวณหาพื้นที่สามเหลี่ยมจากสูตร  ½* ฐาน * สูง แล้วส่งค่ากลับไปแล้วก็  print  ค่าที่ส่งกลับออกมา
 

power point.

  • 1.
  • 2.
    ความหมาย ฟังก์ชั่น (Function ) หมายถึง กลุ่มของคำสั่งที่ถูกนำมารวบรวมไว้ด้วยกัน เพื่อให้สามารถเรียกใช้ได้อย่างสะดวกและเป็นระบบ ฟังก์ชั่นใน PHP มี 2 แบบคือ การสร้างฟังก์ชั่นขึ้นมาใช้งานเอง เรียกว่า user-defined functions ฟังก์ชั่นที่มีให้เรียกใช้อยู่แล้ว เรียกว่า built-in functions เช่น ฟังก์ชั่น chr() , substr()
  • 3.
    การประกาศฟังก์ชั่น มีรูปแบบดังนี้ ชื่อฟังก์ชั่น : เป็นชื่อที่ตั้งขึ้นสำหรับเรียกใช้ฟังก์ชั่นนั้น อาร์กิวเมนต์ 1, อาร์กิวเมนต์ 2,… เป็นตัวแปรชนิดต่างๆโดยระบุไว้ระหว่างวงเล็บเปิดกับวงเล็บปิด ซึ่งจะใช้อาร์กิวเมนต์ในการรับข้อมูลเข้ามาประมวลผล และส่งข้อมูลกลับออกไป ( สำหรับอาร์กิวเมนต์ที่ถูกกำหนดให้ส่งผ่านแบบ by reference ) คำสั่ง : เป็นส่วนการทำงานภายในฟังก์ชั่น Function ชื่อฟังก์ชั่น ([ อาร์กิวเมนต์ 1, อาร์กิวเมนต์ 2,…]){ คำสั่ง ; }
  • 4.
    ตัวอย่างการสร้างฟังก์ชั่น ( 1) ตัวอย่างฟังก์ชั่นที่รับอาร์กิวเมนต์ <? function carea ( $dia,$mode ) { if ( $mode == 0 ) { $area =( 22/28 )* $dia * $dia; // 22/7 * 1/4 return $area; }elseif ( $mode == 1 ) { $area = $dia * $dia; return $area; } } $diameter = 7; echo &quot; วงกลมเส้นผ่านศูนย์กลางยาว $diameter หน่วย มีพื้นที่ =&quot;. carea ( $diameter,0 ).&quot; ตารางหน่วย <br> &quot; ; echo &quot; สี่เหลี่ยมจตุรัสยาวด้านละ $diameter หน่วย มีพื้นที่ =&quot;. carea ( $diameter,1 ).&quot; ตารางหน่วย <br> &quot; ; ?>
  • 5.
    ตัวอย่างการสร้างฟังก์ชั่น (2) ตัวอย่างฟังก์ชั่นที่ไม่รับอาร์กิวเมนต์<? function growname () { $myname = &quot; nana &quot; ; $newname = &quot;&quot; ; for ( $i = 0;$i<strlen ( $myname ) ;$i ++) { $newname .= substr ( $myname,$i,1 ) ; echo $newname .&quot; <br> &quot; ; } } growname () ; ?> จากตัวอย่างนี้ ถ้าลองเปลี่ยนเป็นฟังก์ชั่นที่รับอาร์กิวเมนต์เข้ามาหนึ่งตัวเพื่อแทนชื่อที่รับเข้ามาจะได้รูปแบบฟังก์ชั่นเป็นอย่างไร
  • 6.
    รายละเอียดการทำงานของฟังก์ชั่น ฟังก์ชั่นจัดเป็น case insensitive คือสามารถเรียกใช้ด้วยตัวพิมพ์ใหญ่หรือพิมพ์เล็กก็ได้ เช่น <? function area ($x,$y){ return $x*$y; } $xFunc = “area”; print “Area 12.5 x 20 =”.$xFunc(12.5,20); ?>
  • 7.
    รายละเอียดการทำงานของฟังก์ชั่น ผลลัพธ์ของโปรแกรมคือ ในตัวอย่างตัวแปร $xFunc จะเก็บสตริงคำว่า “ area” เอาไว้ ซึ่งเป็นชื่อของฟังก์ชั่น area() ที่สร้างขึ้น ทำให้การอ้างถึงตัวแปร $xFunc จะเป็นการเรียกใช้ฟังก์ชั่น area() ด้วย
  • 8.
    การส่งผ่านค่าให้แก่ฟังก์ชั่น บางฟังก์ชั่นอาจไม่จำเป็นต้องรับค่าใดๆจากโปรแกรมหลักก็สามารถทำงานและให้ผลลัพธ์ได้ เช่นฟังก์ชั่น time() จะให้ค่าเป็น timestamp ของวันที่และเวลาปัจจุบัน แต่กรณีที่ฟังก์ชั่นต้องการค่าบางอย่างจากโปรแกรมที่เรียกใช้ จะทำได้โดยการส่งค่าผ่านพารามิเตอร์ โดยการส่งผ่านค่าให้กับฟังก์ชั่นทำได้สองวิธีคือ การส่งผ่านด้วยค่า ( Passing by Values ) การส่งผ่านด้วยการอ้างอิง ( Passing by Reference )
  • 9.
    การส่งผ่านด้วยค่า (Passing by Values ) เป็นวิธีการส่งผ่านค่าที่มักใช้โดยทั่วไป คือ เมื่อใส่ตัวแปรเป็นอาร์กิวเมนต์ ( argument ) ให้กับฟังก์ชั่นแล้ว ถึงแม้ในฟังก์ชั่นจะมีการเปลี่ยนค่าของตัวแปรพารามิเตอร์ที่รับค่ามาจากอาร์กิวเมนต์นั้น ค่าของตัวแปรอาร์กิวเมนต์ที่อยู่ภายนอกฟังก์ชั่นก็ไม่เปลี่ยนแปลง
  • 10.
    ตัวอย่างการส่งผ่านค่าของตัวแปร 1 <?$var = 150; $str = &quot; A &quot; ; function sendVal ( $newVar,$newStr ) { $newVar += 100; ++ $newStr; echo &quot; ค่าของ \$newVar คือ &quot;. $newVar .&quot; <br> &quot; ; echo &quot; ค่าของ \$newStr คือ &quot;. $newStr .&quot; <br> &quot; ; } ?> ค่าของฟังก์ชั่น $var ( ก่อนเรียกฟังก์ชั่น ) คือ <?echo $var;?><br> ค่าของฟังก์ชั่น $str ( ก่อนเรียกฟังก์ชั่น ) คือ <?echo $str;?><br> <?sendVal ( $var,$str ) ;?> ค่าของฟังก์ชั่น $var ( หลังเรียกฟังก์ชั่น ) คือ <?echo $var;?><br> ค่าของฟังก์ชั่น $str ( หลังเรียกฟังก์ชั่น ) คือ <?echo $str;?><br>
  • 11.
    ตัวอย่างการส่งผ่านค่าของตัวแปร 2 <?function mat ( $p1,$p2 ) { $p1 = $p1+$p2; return $p1 * $p2; } $x = 15;$y = 4; print &quot; Before use Function<br> &quot; ; print &quot; \$x = $x<br> &quot; ; print &quot; \$y = $y<br> &quot; ; $z = mat ( $x,$y ) ; print &quot; After use Function<br> &quot; ; print &quot; \$x = $x<br> &quot; ; print &quot; \$y = $y<br> &quot; ; print &quot; \$z = $z<br> &quot; ; ?> ค่า z จะมาจากการที่เอาค่า x คูณกับค่า y โดยที่ ค่า x ที่เอามาคูณจะเป็นค่า x บวกค่า y ไปแล้ว เพราะฉะนั้นค่าที่ส่งกลับไปก็คือ (15+4)*4 76
  • 12.
    การส่งผ่านด้วยการอ้างอิง (Passing by Reference ) เมื่อใส่สัญลักษณ์ & (ampersand) เข้าไปไว้หน้าอาร์กิวเมนต์ในขณะสร้างฟังก์ชั่น จะมีผลให้เป็นการส่งผ่านด้วยการอ้างอิง โดยหากในฟังก์ชั่นมีการเปลี่ยนค่าตัวแปรอาร์กิวเมนต์นั้น ค่าของตัวแปรภายนอกฟังก์ชั่นจะถูกเปลี่ยนตามด้วย
  • 13.
    ตัวอย่างการส่งผ่านด้วยการอ้างอิง 1 <?$var = 150; $str = &quot; A &quot; ; function sendVal ( &$newVar,&$newStr ) { $newVar += 100; ++ $newStr; echo &quot; ค่าของ \$newVar คือ &quot;. $newVar .&quot; <br> &quot; ; echo &quot; ค่าของ \$newStr คือ &quot;. $newStr .&quot; <br> &quot; ; } ?> ค่าของฟังก์ชั่น $var ( ก่อนเรียกฟังก์ชั่น ) คือ <?echo $var;?><br> ค่าของฟังก์ชั่น $str ( ก่อนเรียกฟังก์ชั่น ) คือ <?echo $str;?><br> <?sendVal ( $var,$str ) ;?> ค่าของฟังก์ชั่น $var ( หลังเรียกฟังก์ชั่น ) คือ <?echo $var;?><br> ค่าของฟังก์ชั่น $str ( หลังเรียกฟังก์ชั่น ) คือ <?echo $str;?><br> การใส่ & ในอาร์กิวเมนต์ ของฟังก์ชั่นเพื่อให้เป็นการส่ง ผ่านแบบอ้างอิง ( passing by reference )
  • 14.
    ตัวอย่างการส่งผ่านด้วยการอ้างอิง 2 <?function mat ( &$p1,$p2 ) { $p1 = $p1+$p2; return $p1 * $p2; } $x = 15;$y = 4; print &quot; Before use Function<br> &quot; ; print &quot; \$x = $x<br> &quot; ; print &quot; \$y = $y<br> &quot; ; $z = mat ( $x,$y ) ; print &quot; After use Function<br> &quot; ; print &quot; \$x = $x<br> &quot; ; print &quot; \$y = $y<br> &quot; ; print &quot; \$z = $z<br> &quot; ; ?>
  • 15.
    การกำหนดค่าเริ่มต้น ( default) ให้กับอาร์กิวเมนต์ บางกรณีที่ต้องการสร้างฟังก์ชั่นโดยมรอาร์กิวเมนต์เป็นออปชั่น คือในขณะเรียกใช้ฟังก์ชั่นจะใส่อาร์กิวเมนต์หรือไม่ใส่ก็ได้ จะต้องมีการกำหนดค่าสำหรับอาร์กิวเมนต์ไว้ล่วงหน้า
  • 16.
    ตัวอย่างการกำหนดค่า default ให้อาร์กิวเมนต์ จากตัวอย่างฟังก์ชั่น 2 ถ้าเปลี่ยนมาเป็นการกำหนดค่า default ให้กับอาร์กิวเมนต์ จะเป็นดังนี้ <? function growname ( $myname = “Test” ) { $newname = &quot;&quot; ; for ( $i = 0;$i<strlen ( $myname ) ;$i ++) { $newname .= substr ( $myname,$i,1 ) ; echo $newname .&quot; <br> &quot; ; } } growname ( “nana” ) ; growname () ; ?>
  • 17.
    การคืนค่ามากกว่า 1 ค่า เมื่อต้องการใช้ฟังก์ชั่นคืนค่าให้มากกว่า 1 ค่า สามารถอาศัยคุณสมบัติฟังก์ชั่นใน PHP สามารถคืนค่าเป็นอาร์เรย์ได้ โดยการเขียนคำสั่งการคืนค่าในลักษณะดังนี้ return array($var1,$var2)
  • 18.
    ตัวอย่างการคืนค่ามากกว่า 1 ค่า <? function calculator($x,$y){ $a = $x+$y; $b = $x-$y; $c = $x*$y; $myarr[0] = $a; $myarr[1] = $b; $myarr[2] = $c; return $myarr; } $x=20; $y=12; $value = calculator($x,$y); print &quot;$x + $y = &quot;.$value[0].&quot;<br>&quot;; print &quot;$x - $y = &quot;.$value[1].&quot;<br>&quot;; print &quot;$x * $y = &quot;.$value[2].&quot;<br>&quot;; ?>
  • 19.
    ขอบเขต scope ของตัวแปรและค่าคงที่ ตัวแปรที่ประกาศไว้ในฟังก์ชั่นใด จะเป็นที่รู้จักและเรียกใช้ฟังก์ชั่นนั้น ถึงแม้ว่าจะมีการประกาศตัวแปรชื่อเดียวกันไว้ในทั้งในและนอกฟังก์ชั่น ก็ถือว่าเป็นตัวแปรคนละตัวและมีตำแหน่งในหน่วยความจำคนละที่กัน <? $myName = &quot; suthasinee &quot; ; function testVar () { $myName = 1500.25; return $myName; } echo &quot; ตัวแปร \$myName มีค่า $myName <br> &quot; ; echo &quot; ตัวแปร \$myName ในฟังก์ชั่นมีค่า &quot;. testVar ().&quot; <br> &quot; ; echo &quot; ตัวแปร \$myName หลังจากเรียกฟังก์ชั่นมีค่า $myName <br> &quot; ; ?>
  • 20.
    ขอบเขต scope ของตัวแปรและค่าคงที่ ( ต่อ ) จากตัวอย่าง ค่าของตัวแปร $myName ที่อยู่ภายในและภายนอกฟังก์ชั่นจะมีค่าเป็นของตัวเอง ถ้าเราต้องการอ้างถึงตัวแปร $myName ที่อยู่ภายนอกจากภายในฟังก์ชั่น ก็จะต้องประกาศตัวแปรนั้นโดยใช้คำสั่ง global มีรูปแบบดังนี้ Global var_name1, var_name2, var_name3,…; โดยการประกาศนี้จะต้องทำภายในฟังก์ชั่นดังตัวอย่าง
  • 21.
    ตัวอย่างคำสั่ง global<? $myVar = 500; function TestVar () { global $myVar; $myVar ++ ; } echo &quot; ค่าของ \$myVar ก่อนเรียกฟังก์ชั่น : $myVar<br> &quot; ; TestVar () ; echo &quot; ค่าของ \$myVar หลังจากเรียกฟังก์ชั่น : $myVar<br> &quot; ; ?>
  • 22.
    การสร้างตัวแปรแบบ staticโดยทั่วไปแล้วปกติตัวแปรที่เราประกาศไว้ภายในฟังก์ชั่นจะถูกทำลายไปหลังจากการทำงานของฟังก์ชั่นนั้นๆสิ้นสุดลง และจะถูกสร้างขึ้นมาใหม่ตอนที่เราเรียกใช้ฟังก์ชั่น หรือฟังก์ชั่นไม่สามารถรักษาค่าของตัวแปรเหล่านี้ให้คงสภาพอยู่ได้ในระหว่างการทำงานแต่ละครั้ง
  • 23.
    ตัวอย่างฟังก์ชั่นที่ไม่ได้สร้างเป็น static<? function testloop () { $value = 150; $str = &quot; A &quot; ; echo &quot; ค่าของ \$value คือ $value, &quot; ; echo &quot; ค่าของ \$str คือ $str<br> &quot; ; $value -= 10; $str ++ ; } for ( $i = 0;$i<4;$i ++) { testloop () ; } ?>
  • 24.
    ตัวอย่างฟังก์ชั่นที่สร้างเป็น static<? function testloop () { static $value = 150; static $str = &quot; A &quot; ; echo &quot; ค่าของ \$value คือ $value, &quot; ; echo &quot; ค่าของ \$str คือ $str<br> &quot; ; $value -= 10; $str ++ ; } for ( $i = 0;$i<4;$i ++) { testloop () ; } ?>
  • 25.
    ฟังก์ชั่นที่เรียกตัวเอง (Recursive Function ) ฟังก์ชั่นใน PHP มีความสามารถในการเรียกตัวเอง ( recursion ) ได้เช่นเดียวกันกับอีกหลายภาษา โดยใน PHP4 , 5 สามารถนำสคริปต์ที่คอมไพล์ไว้แล้วกลับมาทำงานซ้ำได้ทันที จึงเร็วกว่า PHP3
  • 26.
    ตัวอย่างการทำ RecursiveFunction <? function xx($a){ $a = $a/2; print &quot;\$a = $a<br>&quot;; if(gettype($a)==&quot;integer&quot;){ xx($a); } } xx(1000); ?>
  • 27.
    ทดสอบ ให้สร้างฟังก์ชั่น 2 ฟังก์ชั่นโดยที่ มีการเรียกใช้ฟังก์ชั่นที่ 2 ภายในฟังก์ชั่นที่ 1 ฟังก์ชั่นที่ 1 ให้เป็นการทำงานที่ไม่มีการรับอาร์กิวเมนต์เข้ามาในฟังก์ชั่น โดยที่เป็นการสร้างวันที่และเวลาจากค่า timestamp หลังจากนั้นให้ทำการแยกระหว่างวันที่และเวลา รูปแบบของวันที่และเวลาที่ต้องการได้ เช่น 11/06/08 2:04:48 เมื่อได้ส่วนของวันที่มาแล้วให้ทำการตรวจสอบรูปแบบของวันที่ว่าอยู่ในรูปแบบ dd/mm/yy หรือไม่ผ่านฟังก์ชั่นของ regular expression ฟังก์ชั่นที่ 2 ทำการเรียกใช้ฟังก์ชั่นที่ 1 ในส่วนต้นของฟังก์ชั่น หลังจากนั้นให้ทำการ รับอาร์กิวเมนต์เข้ามาในฟังก์ชั่น โดยตัวแปรที่ส่งเข้ามาคือค่าฐานและสูง เพื่อส่งมาคำนวณหาพื้นที่สามเหลี่ยมจากสูตร ½* ฐาน * สูง แล้วส่งค่ากลับไปแล้วก็ print ค่าที่ส่งกลับออกมา
  • 28.