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