PHP
FUNCTION 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
ไม่มีความคิดเห็น:
แสดงความคิดเห็น